<code>Socket</code>类表示一个<code>客户端套接字</code>,即,当想要连接到远程服务器应用程序时创建的<code>套接字</code>。
想要实现一个服务器应用程序(例如一个HTTP服务器或FTP服务器),你需要另一种方法。应为服务器必须时刻待命,它并不知道客户端应用程序会在什么时候发起连接。此时需要使用<code>java.net.ServerSocket</code>类,这是<code>服务器套接字</code>的实现。
<code>ServerSocket</code>类与<code>Socket</code>类并不相同。<code>服务器套接字</code>要等待来自客户端的连接请求。当<code>服务器套接字</code>收到连接请求后,它会创建一个<code>Socket</code>实例来处理与客户端的通信。
- 创建<code>服务器套接字</code>即<code>ServerSocket</code>实例
可以使用<code>ServerSocket</code>类提供的4个构造函数中的任意一个。需要指明IP地址和<code>服务器套接字</code>侦听的端口号。
典型的情况下,IP地址可以是127.0.0.1,即<code>服务器套接字</code>会侦听本地机器接收到的连接请求。
<code>服务器套接字</code>侦听的IP地址成为绑定地址。
<code>服务器套接字</code>的另一个重要属性是backLog,表示在服务器拒绝接收传入的请求之前,传入的连接请求的最大队列长度。
其中一个构造函数签名如下:
<code>public ServerSocket(int port, int backLog, InetAddress bindingAddress);</code>
需要注意,参数绑定地址必须是<code>java.net.InetAddress</code>类的实例。
创建<code>InetAddress</code>对象的一种简单方法是调用其静态方法getByName(),传入包含主机名的字符串,代码如下:
<code>InetAddress.getByName("127.0.0.1");</code> - 创建了<code>ServerSocket</code>实例后,可以使其等待传入的连接请求,该连接请求会通过<code>服务器套接字</code>侦听的端口上绑定地址传入。
- <code>ServerSocket</code>处理连接请求
处理连接请求通过调用<code>ServerSocket</code>类的<code>accept()</code>方法完成。
只有当接收到连接请求后,该方法才会返回,其返回值是一个<code>Socket</code>实例。
然后,如上节1.2.1 Socket类 所述,可以使用该<code>Socket</code>对象与客户端应用程序进行字节流的发送/接收。