原文链接 作者:Jakob Jenkov 译者:homesick
用java.net.ServerSocket实现java服务通过TCP/IP监听客户端连接,你也可以用Java NIO 来代替java网络标准API,这时候需要用到 ServerSocketChannel。
创建一个 ServerSocket连接
以下是一个创建ServerSocket类来监听9000端口的一个简单的代码
ServerSocket serverSocket = new ServerSocket(9000);
监听请求的连接
要获取请求的连接需要用ServerSocket.accept()方法。该方法返回一个Socket类,该类具有普通java Socket类的所有特性。代码如下:
ServerSocket serverSocket = new ServerSocket(9000); boolean isStopped = false;while(!isStopped){ Socket clientSocket = serverSocket.accept(); //do something with clientSocket}
对每个调用了accept()方法的类都只获得一个请求的连接。
另外,请求的连接也只能在线程运行的server中调用了accept()方法之后才能够接受请求。线程运行在server中其它所有的方法上的时候都不能接受客户端的连接请求。所以”接受”请求的线程通常都会把Socket的请求连接放入一个工作线程池中,然后再和客户端连接。更多关于多线程服务端设计的文档请参考 java多线程服务
关闭客户端Socket
客户端请求执行完毕,并且不会再有该客户端的其它请求发送过来的时候,就需要关闭Socket连接,这和关闭一个普通的客户端Socket连接一样。如下代码来执行关闭:
socket.close();
关闭服务端Sockets
要关闭服务的时候需要关掉 ServerSocket连接。通过执行如下代码:
serverSocket.close();