天天看点

Java 网络教程: ServerSocket

用java.net.serversocket实现java服务通过tcp/ip监听客户端连接,你也可以用java nio 来代替java网络标准api,这时候需要用到 serversocketchannel。

以下是一个创建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.close();

要关闭服务的时候需要关掉 serversocket连接。通过执行如下代码:

serversocket.close();