2017-11-22 9 views
-1

이 문제를 해결할 수있는 모든 솔루션을 시도했습니다.ObjectInputStream 생성자가 프로그램을 중단합니다

server = new ServerSocket(9421); 
client = new Socket("localhost", 9421); 
out = new ObjectOutputStream(client.getOutputStream()); 
out.flush(); 
System.out.println("Starting input streams"); 
in = new ObjectInputStream(client.getInputStream()); 
System.out.println("input streams are now running"); 

모든 것은 ObjectInputStream 앞에 ObjectInputStream을 선언하도록 알려줍니다. 다른 곳에서는 Object 출력 스트림을 비우라고 알려줍니다. 이 코드는 프로그램을 멈추고 소위 헤더를 기다리는 것을 기다립니다.

+0

미안하지만 게시 한 내용은 직접적인 문제에서 물러나서 [Java의 소켓 프로그래밍에 대한 자습서] (https://docs.oracle.com/javase/tutorial/networking/sockets/)를 공부해야한다는 것을 나타냅니다. index.html). 이것을 실용적인 코드로 바꾸는 것은 StackOverflow에서 너무 광범위합니다. –

답변

2

모든 것은 ObjectInputStream 앞에 ObjectInputStream을 선언해야한다는 것을 알려줍니다.

아니 그렇지 않아, 그것은 ObjectInputStream 전에 ObjectOutputStream를 구성 할 것을 않으며, 당신은 그 일을하고 있습니다.

다른 곳에서는 Object 입력 스트림을 비우라고 알려줍니다.

아니요, 그들은 ObjectOutputStream을 플러시한다고 말합니다.

정확하게 읽으십시오.

이 코드는 프로그램을 정지시키고 이른바 헤더를 기다리고 있습니다.

정확히 100 % 정확합니다. 그것에 대해 '소위'는 없습니다. 그리고 아무것도 헤더를 작성했습니다. 피어는 아직 ObjectOutputStream을 구성하지 않았으며이 코드는 연결이 끊어 지거나 연결이 끊어 지거나 네트워크가 끊어 질 때까지 차단됩니다.

실제로 피어는 연결을 수락하지 않았습니다. 이 코드를 모두 같은 스레드에서 실행할 수는 없습니다. ServerSocket에는 별도의 accept-loop 스레드가 필요하며 해당 스레드는 동일한 순서로 객체 스트림을 구성하는 허용 소켓 당 추가 스레드를 시작해야합니다.