0

OIS 기호를 찾을 수 없습니다 - 서버 응용 프로그램을하지만 난이와 바보 문제 (그것이 내가 자바 직렬화를 사용하지 않는 경우 모든 확인 (예를 단순화))이 있습니다나는 간단한 클라이언트 쓰고 있어요

ServerSocket serversocket=null; 
    Socket socket=null;  
    String slowo=null; 

    try { 
     serversocket=new ServerSocket(8877); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     socket=serversocket.accept(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    slowo=(String)ois.readObject(); 

내 컴파일러는 보여줍니다 :

Serwer.java:51: cannot find symbol 
symbol : variable ois 
location: class Serwer 
slowo=(String)ois.readObject(); 
        ^
1 error 

아무도 도와 줄 수 있습니까?

나는 하나 더 질문이 있습니다. 이 프로그램이 메시지를 보내지 않는 이유는 무엇입니까?

Serwer.java :

공용 클래스 Serwer {

public static void main(String[] args) { 
    ServerSocket serversocket=null; 
    Socket socket=null; 
    InputStream we=null; 
    OutputStream wy=null; 
    BufferedReader odczyt=null; 
    BufferedReader odczytWe=null; 
    DataOutputStream zapis=null; 
    String slowo=null; 
    String tekst=null; 

    ObjectInputStream ois=null; 
    ObjectOutputStream oos=null; 

    try { 
     serversocket=new ServerSocket(8877); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     socket=serversocket.accept(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     ois = new ObjectInputStream(socket.getInputStream()); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     oos=new ObjectOutputStream(socket.getOutputStream()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    //slowo=(String)ois.readObject(); 

    while(true) { 
     try { 
      slowo=(String) ois.readObject(); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     if(slowo==null || slowo.equals("end")) { 
      try { 
       socket.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      System.exit(0); 
     } 
     else if(slowo!=null) { 
      System.out.println(slowo); 
     } 

      odczyt=new BufferedReader(new InputStreamReader(System.in)); 
      try { 
       tekst=odczyt.readLine(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      try { 
       oos.writeObject(tekst); 
       oos.flush(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      } 

} 

}

Klient.java :

public class Klient { 
public static void main(String[] args) { 

Socket socket=null; 
InputStream we=null; 
OutputStream wy=null; 
BufferedReader odczyt=null; 
BufferedReader odczytWe=null; 
DataOutputStream zapis=null; 
String slowo=null; 
String tekst=null; 
ObjectInputStream ois=null; 
ObjectOutputStream oos=null; 

try { 
    socket=new Socket("localhost", 8877); 
} catch (UnknownHostException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
try { 
    ois=new ObjectInputStream(socket.getInputStream()); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
try { 
    oos=new ObjectOutputStream(socket.getOutputStream()); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

while(true) { 
    try { 
     slowo=(String) ois.readObject(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    if(slowo==null || slowo.equals("end")) { 
     try { 
      socket.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.exit(0); 
    } 
    else if(slowo!=null) { 
     System.out.println(slowo); 
    } 

     odczyt=new BufferedReader(new InputStreamReader(System.in)); 
     try { 
      tekst=odczyt.readLine(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     try { 
      oos.writeObject(tekst); 
      oos.flush(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

} 

} 

}

답변

6

그것은에 의해 범위 밖이다 시간 요 이전 시도에서 선언했기 때문에 51 행으로 이동합니다.

양쪽에서 선언을 이동하거나 코드를 다르게 작성하십시오.

이 스타일은 복잡하고 읽기가 어렵다고 생각합니다. 나는이처럼 써서 :

ServerSocket serversocket=null; 
String slowo=""; 
try { 
    serversocket=new ServerSocket(8877); 
    Socket socket = serversocket.accept(); 
    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
    ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream()); 
    slowo=(String)ois.readObject(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    close(serversocket); 
} 

나쁜 IDE가 당신을 위해 나쁜 코드를 작성하지 마십시오.

finally 블록에서 소켓을 닫아야합니다.

+0

+1 IDE 코드 작성 의견 –