我正在开发一个用 Java 编写的网络应用程序,使用 Sockets 之上的 ObjectOutputStream 和 ObjectInputStream 来交换消息。我的代码如下所示:
发件人:
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 没有很多资源。当我进一步研究它时,我会不断更新这个问题。