当我通过套接字只发送一个对象时,我很好。但是当我试图发送两个对象时,我得到了
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source))
我已经尝试了几乎所有类似flush()或reset()但没有一个工作。
public String SendObject(Object o) throws IOException {
OutputStream outToServer = client.getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(outToServer);
out.writeUnshared(o);
InputStream inFromServer = client.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
return in.readUTF();
}
答案 0 :(得分:1)
您正在使用ObjectOutputStream
从客户端编写Object
。您应该使用ObjectInputStream
(而不是DataInputStream
)在服务器上阅读它们。阅读两个Object
可能看起来像,
InputStream inFromServer = client.getInputStream();
ObjectInputStream in = new ObjectInputStream(inFromServer);
Object obj1 = in.readObject();
Object obj2 = in.readObject();
此外,在客户端上,我认为你想要writeObject
(而不是writeUnshared
)
ObjectOutputStream out = new ObjectOutputStream(outToServer);
out.writeObject(o);
答案 1 :(得分:1)
虽然其他答案(例如@ EJP)对于发送/接收对象和处理流的正确方法是正确的,但我认为直接问题出在服务器端:
Exception in thread "main" java.net.SocketException: Connection reset
这似乎是说在客户端收到响应之前连接已断开。当客户端尝试读取时,它会看到损坏的(重置)连接并抛出异常。
如果(如你所说)sendObject
方法第一次工作,那么我怀疑服务器端正在关闭其输出流以“刷新”响应......或类似的东西。
答案 2 :(得分:0)
writeObject()/writeUnshared()
和readUTF().