gpt4 book ai didi

java - ObjectOutputStream 不发送数据(服务器卡在 socket.accept() 处)

转载 作者:行者123 更新时间:2023-12-01 12:37:01 33 4
gpt4 key购买 nike

我正在尝试使用 Java 通过连接发送对象。这是我的客户端代码。服务器第一次收到数据,第二次就卡在socket.accept()处。我在这里做错了什么吗?谢谢!

  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();

}
}

最佳答案

有两件事:

  1. 刷新 ObjectOutputStream 而不是底层 OutputStream。
  2. 客户端使用相同的流,因此使用相同的连接写入服务器,因此服务器不应期望第二次接受,而是继续读取同一连接的流。当然,您也可以设置一个新的连接(Socket)并通过该套接字发送第二个对象。然后服务器应该接受另一个套接字。

关于java - ObjectOutputStream 不发送数据(服务器卡在 socket.accept() 处),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489145/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com