Java网络:ServerSocket

时间:2020-01-09 10:36:14  来源:igfitidea点击:

为了实现Java服务器来侦听通过TCP / IP从客户端传入的连接,我们需要使用java.net.ServerSocket。如果我们更喜欢使用Java NIO而不是Java Networking(标准API),那么也可以使用ServerSocketChannel而不是java.net.ServerSocket

创建一个ServerSocket

这是一个简单的代码示例,该示例创建一个侦听端口9000的" ServerSocket":

ServerSocket serverSocket = new ServerSocket(9000);

监听传入的连接

为了接受传入的连接,我们必须调用ServerSocket.accept()方法。 accept()方法返回一个Socket,其行为类似于普通的Java Socket。看起来是这样的:

ServerSocket serverSocket = new ServerSocket(9000);

boolean isStopped = false;
while(!isStopped){
    Socket clientSocket = serverSocket.accept();

    //do something with clientSocket
}

每次调用accept()方法仅打开一个传入连接。

另外,只有在运行服务器的线程调用accept()时,才能接受传入连接。在此方法之外的所有时间,线程一直在执行,没有客户端可以连接。因此,"接受"线程通常将传入的连接(套接字)传递给工作线程池,然后该工作线程与客户端进行通信。有关多线程服务器设计的更多信息,请参见教程Java多线程服务器。

关闭客户端套接字

一旦客户端请求完成,并且不再收到该客户端的进一步请求,则必须关闭该Socket,就像关闭普通客户端Socket一样。这是通过调用以下命令完成的:

socket.close();

关闭服务器套接字

一旦服务器关闭,我们需要关闭ServerSocket。这是通过调用以下命令完成的:

serverSocket.close();