gpt4 book ai didi

java - 如何关闭无限循环锁定的套接字?

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:52 24 4
gpt4 key购买 nike

我创建了一个服务器客户端项目,服务器不断监听并打印信息。但是,当我关闭客户端时,服务器保持打开状态。问题是我需要将其插入到另一个应用程序中,并且,如果服务器一开始没有关闭,则应用程序将不会打开,除非我终止该端口中的进程(但这对我来说不是一个选项)。一旦客户端断开连接,我应该如何正确关闭服务器?

这是代码:

服务器:

public class Server {

public static void main(String[] args) {
Connection conn = new Connection();
new Thread(conn).start();
}

private static class Connection implements Runnable {
@Override
public void run() {
try (ServerSocket serverSocket = new ServerSocket(5005)) {
Socket socket = serverSocket.accept();

listener(socket);
} catch (IOException ex) {
ex.printStackTrace();
}
}

private void listener(Socket socket) throws IOException {
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
boolean alive = true;

while (alive) {
try {
outputStream.writeUTF(new Scanner(System.in).nextLine());
System.out.println(inputStream.readUTF());
} catch (IOException ex) {
ex.printStackTrace();
alive = false;
}
}
}
}
}

客户端:

public class Client {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 5005)) {
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());

while (socket.isConnected()) {
System.out.println("Incoming data: " + inputStream.readUTF());

outputStream.writeUTF(new Scanner(System.in).nextLine());
outputStream.flush();
}

} catch (IOException ex) {
ex.printStackTrace();
}
}
}

从现在起,非常感谢您!

最佳答案

强制系统等待而不关闭的是 Server.java 中的这一行:

outputStream.writeUTF(new Scanner(System.in).nextLine());

一旦它开始等待用户输入,它就会在实例的生命周期中永远等待,尽管您的客户端已断开连接。

那么你能做什么呢?您可以创建另一个线程来定期进行“ENTER”输入(如果您坚持使用新的 Scanner(System.in)),例如每 5 秒输入一次。在输入或任何其他有意义的输入之后,如果您确定这不是来自您的客户端,则不要将其写入客户端并再次等待用户输入(如果您的客户端仍然连接!)。如果您的客户端未连接,只需完成循环即可。

请检查 Java Robot 类和 this example

关于java - 如何关闭无限循环锁定的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065695/

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