如何使用java.net.ServerSocket

时间:2018-03-19 05:13:11

标签: java network-programming serversocket

我正在使用java.net.ServerSocket来监听连接。我正在使用它的accept()方法来获取客户端的连接,然后适当地处理它们。我希望持续倾听客户的意见,永远不会对他们无法接触。目前我的代码与此类似:

ServerSocket serverSocket = ...
while (shouldBeListening) {
    handleClient(serverSocket.accept());
}

handleClient方法可能需要少量时间(不到十分之一毫秒)。我担心在ServerSocket.accept()方法返回的时间和再次调用之间可能错过了连接请求。解决这个问题的最佳方法是什么?

编辑: 我实现它的方式目前在handleClient方法中创建了一个新线程,但即使这需要时间(特别是因为这是在Raspberry Pi上运行),我担心如果请求连接当handleClient方法正在执行时,它可能会被拒绝,因为accept()没有被运行。

1 个答案:

答案 0 :(得分:3)

像这样。

 ServerSocket listener = new ServerSocket(8001);
    try {
      while (true) {
         Socket socket = listener.accept();

然后,您可以将套接字引用传递给您拥有的处理程序类。使该类实现 Runnable 。每次将套接字引用传递给处理程序类以同时处理请求时,创建一个新线程。 请参阅以下链接以获取解决方案。如果您需要完整的代码。让我知道。

Runnable Sample by Jenkov

ThreadPool Sample - Stackoverflow