在java中,如何通过一个套接字发送多个对象?
当我通过套接字只发送一个对象时,我就可以了。但当我试图发送两个对象时,我得到在java中,如何通过一个套接字发送多个对象?,java,sockets,serialization,Java,Sockets,Serialization,当我通过套接字只发送一个对象时,我就可以了。但当我试图发送两个对象时,我得到 Exception in thread "main" java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source)) 我尝试了几乎所有的方法,如flush()或reset(),但都不起作用 public String SendObject(Object o) throws IOExceptio
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();
}
您正在使用
ObjectOutputStream
从客户端写入对象。您应该使用(而不是DataInputStream
)在服务器上读取它们。要读取两个对象
s可能看起来像
InputStream inFromServer = client.getInputStream();
ObjectInputStream in = new ObjectInputStream(inFromServer);
Object obj1 = in.readObject();
Object obj2 = in.readObject();
另外,在客户机上,我认为您希望writeObject
(而不是)像
在套接字的生命周期中必须使用相同的流,而不是每次发送(或接收)都使用新的流李>
您需要在对象流和数据流之间做出决定。不要把它们混在一起
不要试图混用writeObject()/writeUnshared()
和readUTF()。
虽然关于发送/接收对象和处理流的正确方式,其他答案(例如@EJP)是正确的,但我认为最直接的问题在于服务器端:
Exception in thread "main" java.net.SocketException: Connection reset
这似乎是说,在客户端收到响应之前,连接已断开。当客户端尝试读取时,它会看到断开(重置)的连接并抛出异常
如果(如您所说)sendObject方法第一次工作,那么我怀疑服务器端正在关闭其输出流以“刷新”响应。。。或者类似的东西。您如何发送一个对象?帖子代码。请用你的代码(格式正确)编辑你的原创帖子。不要把它放在评论里。另外,请包括您收到的确切错误。但是,当我只发送一个对象时,为什么它会起作用呢?我尝试了WriteObject
,我也尝试了同样的方法results@orestiskim你检查过Javadoc吗?在这里使用writeUnshared()
没有问题:的确,如果他计划重新发送对象,这是个好主意。那么你有什么建议?我建议你看看服务器端正在做什么。
Exception in thread "main" java.net.SocketException: Connection reset