使用 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

------完------

推荐阅读:

Java 网络编程 之 概述

Java 网络编程 之 套接字(Socket)

Java IO 简明教程

Java NIO 简明教程

更多学习讨论欢迎关注公众号:
七日书摘微信公众号

参考资料:
https://www.cnblogs.com/czwbig/p/10018118.html
http://ifeve.com/java-io-network/