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();