sockets - 无限循环监听套接字

标签 sockets infinite-loop serversocket

我有一个实现,其中我监听事件的端口并根据输入进行处理。我将其保持在无限循环中。但是,它只能运行一次,然后我必须再次重新启动该程序。控制永远不会回来。这个无限循环是个好主意吗?

Integer port = Integer.parseInt(Configuration.getProperty("Environment", "PORT"));
ServerSocket serverSocket = new ServerSocket(port);
LOG.info("Process Server listening on PORT: " + port);
while(true){            
    Socket socket = serverSocket.accept();
    new Thread(new ProcessEvent(socket)).start();
}

最佳答案

一旦启动了处理客户端的线程,您还需要循环读取函数,因为在读取一条消息之后,您将需要读取下一条消息。每个客户端连接accept()仅返回一次。打开连接后,线程中所有操作都会发生,直到关闭连接为止。

accept()上循环是个好主意,但是只要连接了客户端,就不能退出生成的线程。如果您有意关闭连接,则可以确保双方都正确处理了它,并且客户端需要重新打开连接以进行进一步的通信,这应该没问题。

关于sockets - 无限循环监听套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27520201/

相关文章:

c++ - 为什么这会导致 Mac 上的无限循环?

java服务器套接字

c# - 如何在 C# 中获取 tcp 客户端 ip 和端口并显示?

sockets - 套接字无法识别协议(protocol)(套接字泄漏)

linux - 如何在 Python/Jython 中仅读取套接字中的最新数据和/或清空套接字

java - 为什么这个 while 循环会导致无限循环?

java - 指定默认值

javascript - socket.io-client 对象不是函数

python - 搭建python与smalltalk通信的桥梁

JavaScript:更改无限循环的超时时间?