Java ObjectOutputStream未发送数据(服务器卡在socket.accept()上)
我正在尝试使用Java通过连接发送对象。这是我的客户端代码。服务器第一次收到数据,但第二次卡在socket.accept()上。我做错什么了吗?谢谢大家!Java ObjectOutputStream未发送数据(服务器卡在socket.accept()上),java,sockets,outputstream,objectoutputstream,Java,Sockets,Outputstream,Objectoutputstream,我正在尝试使用Java通过连接发送对象。这是我的客户端代码。服务器第一次收到数据,但第二次卡在socket.accept()上。我做错什么了吗?谢谢大家! public class Client { public static void main(String args[]) { try { Socket socket =
public class Client
{
public static void main(String args[])
{
try
{
Socket socket = new Socket("localhost", 40003);
ClientObject c = new ClientObject(socket);
c.init();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class ClientObject
{
Socket socket;
public ClientObject(Socket socket)
{
this.socket = socket;
}
public void init()
{
try
{
// computation
SendObject so = new SendObject(toSend1, toSend2, rand, username.length());
// send all of this
OutputStream o = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(o);
oos.writeObject(so);
o.flush();
InputStream i = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(i);
// works, data received from the server
so = (SendObject)ois.readObject();
// further computation
so = new SendObject(null, digest, rand + 1, -1);
oos.reset();
oos.writeObject(so);
// doesn't work :(
o.flush();
}
}
两件事:
accept
,而是继续读取相同连接的流。当然,您也可以设置一个新的连接(Socket
)并通过该套接字发送第二个对象。然后服务器应该接受另一个套接字
在我看来,服务器已成功接受连接,否则您将无法发送和接收。看看您的服务器代码,问题可能是您在服务器从客户机接收到消息后关闭了套接字连接。请提供您的服务器代码以供查看。您确定客户端不工作吗?服务器端卡在
accept()
方法上。我推断客户端没有发送任何数据。服务器端会有问题吗?我正在使用线程。几年前,我试图做与您正在做的相同的事情,但我在对象流中遇到了类似的问题。。。如果可能的话,我建议使用JSON进行序列化,而不是java对象序列化。我会尝试一下,因为这很令人沮丧。你能给我一个好的开始链接吗?也许是图书馆?CheersHow如果服务器已经成功地接收并发送回SendObject,那么它是否会被困在accept?该连接已被接受很长时间。显示服务器代码。令人尴尬的误解是,socket
如何在Java中工作。非常感谢。