使用 java.net.ServerSocket 实现的 Java 服务器,可以用来监听来自 TCP/IP 客户端传入的连接。你也可以使用 Java NIO 来替代 Java Networking(java 网络标准API),这时需要用到 ServerSocketChannel 。
阅读文章的过程中如果有任何疑问,欢迎添加笔者为好友,拉您进微信交流群,一起交流技术,一起打造高质量的职场技术交流圈子,抱团取暖,共同进步。
创建一个 ServerSocket 连接(Creating a ServerSocket)
以下是一个创建 ServerSocket 类用来监听 9000 端口的示例:
ServerSocket serverSocket = new ServerSocket(9000);
监听传入连接(Listening For Incoming Connections)
要获取传入的连接需要调用 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() 时才能接受传入连接。线程再此方法之外执行的所有时间是没有客户端可以连接的。因此,”接受” 传入的线程通常会把 Socket 连接放入一个工作线程池中,然后再和客户端连接。更多关于多线程服务端设计的文档请参考 java 多线程服务。
关闭客户端 Sockets(Closing Client Sockets)
一旦客户端请求执行完毕,且该客户端不会再有其它请求发向服务端的时候,就需要关闭 Socket 连接,这和关闭一个普通的客户端 Socket 连接是一样的。可以通过如下示例代码完成:
socket.close();
关闭服务端 Sockets(Closing Server Sockets)
一旦服务器要关闭,就需要关闭 ServerSocket 。 可通过如下示例代码完成:
serverSocket.close();
英文原文链接:http://tutorials.jenkov.com/java-networking/server-sockets.html
------完------
推荐阅读:
更多学习讨论欢迎关注公众号:
参考资料:
https://www.cnblogs.com/czwbig/p/10018118.html
http://ifeve.com/java-io-network/