如何使用 java.net.ServerSocket 持续监听端口
How to continuously listen on port with java.net.ServerSocket
我有一个 java.net.ServerSocket that is am using to listen for connections. I am using it's accept() 方法来从客户端获取连接,然后适当地处理它们。我希望 不断地 倾听客户的意见,并且永远不会联系到他们。目前我有类似这样的代码:
ServerSocket serverSocket = ...
while (shouldBeListening) {
handleClient(serverSocket.accept());
}
handleClient
方法可能需要少量时间(不到十分之一毫秒)。我担心在 ServerSocket.accept() 方法 returns 和再次调用之间可能会错过连接请求。解决此问题的最佳方法是什么?
编辑:
我实现它的方式目前在 handleClient
方法中创建了一个新线程,但即使这需要时间(特别是因为这是 运行 在 Raspberry Pi), I am worried that if a connection is requested while the handleClient
method is being executed then it may be rejected because accept() 上不是 运行.
像这样。
ServerSocket listener = new ServerSocket(8001);
try {
while (true) {
Socket socket = listener.accept();
然后您可以将套接字引用传递给您拥有的处理程序class。使 class 实现 Runnable。每次将套接字引用传递给处理程序 class 时创建一个新线程以同时处理请求。
请参阅以下链接以获取解决方案。如果你需要一个完整的代码。让我知道。
ThreadPool Sample - Whosebug
我有一个 java.net.ServerSocket that is am using to listen for connections. I am using it's accept() 方法来从客户端获取连接,然后适当地处理它们。我希望 不断地 倾听客户的意见,并且永远不会联系到他们。目前我有类似这样的代码:
ServerSocket serverSocket = ...
while (shouldBeListening) {
handleClient(serverSocket.accept());
}
handleClient
方法可能需要少量时间(不到十分之一毫秒)。我担心在 ServerSocket.accept() 方法 returns 和再次调用之间可能会错过连接请求。解决此问题的最佳方法是什么?
编辑:
我实现它的方式目前在 handleClient
方法中创建了一个新线程,但即使这需要时间(特别是因为这是 运行 在 Raspberry Pi), I am worried that if a connection is requested while the handleClient
method is being executed then it may be rejected because accept() 上不是 运行.
像这样。
ServerSocket listener = new ServerSocket(8001);
try {
while (true) {
Socket socket = listener.accept();
然后您可以将套接字引用传递给您拥有的处理程序class。使 class 实现 Runnable。每次将套接字引用传递给处理程序 class 时创建一个新线程以同时处理请求。 请参阅以下链接以获取解决方案。如果你需要一个完整的代码。让我知道。
ThreadPool Sample - Whosebug