2

SocketChannel用来在服务器和客户端之间发送消息。一旦客户端连接到服务器,服务器就会在 try-with-resources 尝试中打开InputStreamsandOutputStream来接收来自客户端的消息并将消息发送客户端,如下所示:

try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
     ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {}

我想out在尝试之外访问。try 包含一个 while 循环,该循环重复检查消息是否已到达in,它工作正常。

我尝试global_out通过执行以下操作设置全局变量,例如:

ObjectOutputStream global_out;
...
try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
     ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {

    setOut(out);
    while(should_check) {
        Object message = in.readObject();   
        //do something
    }
}

然后我尝试写入这个 OutputStream,如下所示:

public void sendMessage(Object message) {
    global_out.writeObject(message);
}

我只调用sendMessage(Object)when should_ceckistrue并测试 if global_outis null,它不是。然而,sendMessage(Object)永远不会回来。如果global_out 不是 ,它一定是被设置的,那么为什么在终止null之前不能使用资源呢?try-with-resources

有什么办法可以解决这个问题吗?

4

0 回答 0