This question already has answers here:
new ObjectInputStream() blocks
(2个答案)
2年前关闭。
我在服务器和客户端中有两种方法:
服务器:
客户:
当客户端开始运行时,使用ObjecInputStream发送检查消息“
(2个答案)
2年前关闭。
我在服务器和客户端中有两种方法:
服务器:
@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();
}
}
当客户端开始运行时,使用ObjecInputStream发送检查消息“
"ping
”,但是上述方法中的代码在System.out.println(1);
上停止,我不知道为什么。在所有类似代码中都未运行。还没完成吗 最佳答案
您在这里基本上陷入了僵局。如果首先启动服务器,它将开始监听端口9998上的连接。然后启动客户端时,它将与服务器建立连接。服务器接受连接,并尝试创建ObjectInputStream
。 ObjectInputStream
构造函数(和服务器线程)将阻塞,直到它可以从客户端(客户端尚未发送)读取流头为止。因此,服务器无法达到创建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/
10-08 21:53