Java에서 작성된 네트워크 응용 프로그램에서 소켓 위의 ObjectOutputStream 및 ObjectInputStream을 사용하여 메시지를 교환하고 있습니다. 내 코드는 다음과 같습니다Java ObjectOutputStream on Socket not flush() ing
보낸 사람 :
ObjectOutputStream out;
ObjectInputStream in;
try{
Socket socket=new Socket(address, port);
socket.setSoLinger(true, socketLingerTime);
out=new ObjectOutputStream(socket.getOutputStream());
out.writeObject(message);
out.flush();
out.close();
}catch (variousExceptions)...
수신기 :
Object incoming;
try{
incoming=myObjectInputStream.readObject();
}catch (SocketException socketError)
{
if (socketError.getMessage().equals("Connection reset"))
{
//this is the exception I get
}
}
때때로 메시지가 확인을 통과하지만, 다른 시간 나는 객체 대신 표시된 예외를 얻을. 플러시가 메시지를 다른쪽으로 강제로 전달하지 않습니까? 어떻게 든 함수를 잘못 사용하고 있습니까? 또는 기본 Java/OS 네트워크 코드에서 일종의 버그입니까?
감사합니다.
업데이트 :
나는이에 좀 더 스누핑 짓을했는지, 그리고 시스템의 자원이 무언가에 의해 과세되는 경우에만 일어날 것으로 보인다. VirtualBox 외부에서 복제 할 수 없었지만 VirtualBox에 많은 리소스가 없어서 그럴 수 있습니다. 이 질문은 내가 더 자세히 살펴볼 때마다 계속 업데이트 될 것이다.
문제를 복제 할 수 없습니다. 자세한 내용은? –
더 많은 수신자 코드를 표시 할 수 있습니까? 동일한 소켓을 통해 하나 이상의 메시지를 보내거나 받고 싶습니까 (이 경우 스트림을 닫지 않아야 함). – jtahlborn
리시버에서 연결을 재설정 할 때 보낸 사람 측에서 예외가 발생 했습니까? – nojo