gpt4 book ai didi

java - 创建 ObjectInputStream 对象时程序停止

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:26 25 4
gpt4 key购买 nike

我在服务器和客户端有两种方法:

服务器:

@Override
public void start(Stage primaryStage) throws Exception {
socket = new Socket("localhost", 9998);
System.out.println("connected");
input = new ObjectInputStream(socket.getInputStream());
System.out.println("1");
output = new ObjectOutputStream(socket.getOutputStream());

output.writeObject(new Message(CONFIG, "ping"));

FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/window/fxmls/window.fxml"));
loader.setController(this);
AnchorPane anchorPane = loader.load();
Scene scene = new Scene(anchorPane);
primaryStage.setScene(scene);
primaryStage.show();
}

客户:

@Override
public void run() {
try {
serverSocket = new ServerSocket(9998);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("connected");
input = new ObjectInputStream(socket.getInputStream());
System.out.println(1);
output = new ObjectOutputStream(socket.getOutputStream());
Message message = (Message) input.readObject();
if (message.getHeader() == CONFIG && message.getMessage().equals("ping")) {
System.out.println(message.getMessage());
}
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}

当客户端开始运行时,发送检查消息"ping “使用 ObjecInputStream,但上述方法中的代码在 System.out.println(1); 上停止,我不知道为什么。之前类似的代码都在运行。我做错了什么?input = new ObjectInputStream(socket.getInputStream()); 正在等待我没有做过的事情?

最佳答案

这里基本上陷入了僵局。如果您首先启动服务器,它将开始监听端口 9998 上的连接。然后当您启动客户端时,它将与服务器建立连接。服务器接受连接,并尝试创建一个ObjectInputStreamObjectInputStream 构造函数(和服务器线程)将阻塞,直到它可以从客户端读取流 header (客户端尚未发送)。因此,服务器不会创建 ObjectOutputStream(这会导致数据发送到客户端)。

同时,客户端尝试创建 ObjectInputStream 并将被阻止,因为服务器尚未发送任何数据。结果是 ObjectInputStream 构造函数中阻塞了两个线程。

解决方案非常简单 - 在服务器中,首先创建 ObjectOutputStream,然后创建 ObjectInputStream:

socket = new Socket("localhost", 9998);
output = new ObjectOutputStream(socket.getOutputStream());
input = new ObjectInputStream(socket.getInputStream());

关于java - 创建 ObjectInputStream 对象时程序停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54095782/

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