2010-03-22 3 views
1

TCP/IP 소켓을 통해 두 개의 개별 응용 프로그램을 연결하려고합니다. 이 경우 응용 프로그램 중 어느 것도 다른 클라이언트의 "클라이언트"로 실행되고 있지 않으므로 서로 통신해야하는 별도의 두 서버로 쉽게 설명 할 수 있습니다.EOS에 도달 한 후 Java 소켓의 InputStream 재설정

데이터를 수신하려면 InputStream.Read() 함수를 사용하고 -1 값을 받으면 처리를 중지해야합니다. 그러나 이제 문제는 다른 데이터 세트가 함께 제공되는 경우 InputStream이 이미 스트림 끝 (EOS)에 있고 전송되는 모든 새 데이터가 삭제되거나 무시된다는 것입니다. 이 문제를 해결할 수있는 유일한 방법은 스트림의 끝 부분에 도달하면 소켓을 닫은 다음 다시 열어 다른 방식으로 더 잘 처리 할 수 ​​있다고 생각하는 것입니다.

입력 스트림을 재설정하여 다음 데이터 세트를 준비 할 수 있습니까?

답변

4

다른 끝이 소켓의 쓰기면을 닫았 기 때문에 TCP/IP 소켓에서 읽을 때 EOS가 표시됩니다. 이런 일이 발생하면 TCP/IP 프로토콜은 연결을 "닫히지"못합니다.

새 연결을 열지 않으려면 TCP/IP 전송 프로토콜 위에 응용 프로그램 프로토콜이 있어야합니다.이 프로토콜을 사용하면 각 논리적 데이터 집합의 끝을 알 수 있습니다. 닫지 않고 .

+0

그림이 그렇게 간단하지는 않습니다. 글쎄, 필자는 쓰기 편을 닫기 위해 다른 쪽 끝을 제어 할 수 없기 때문에 EOS를 확인한 다음 닫기를 수행하고 다시 열어야한다. 고맙습니다. – JRSofty

관련 문제