Java ServerSocket类的用法(附带实例)
Java 中的 ServerSocket 类实现了服务器端套接字。ServerSocket 对象监听网络中来自客户机的服务请求,根据请求建立连接,并根据服务请求运行相应的服务程序。
创建 ServerSocket 对象的示例代码如下:
创建了一个 ServerSocket 对象 serverSocket,并将服务绑定在 2010 号端口:
注意,这里的 10 是队列长度,并不是只能最多 10 个客户端。实际上,即使是 1000 个客户端连接这台服务器,只要这 1000 个客户端不是在极短的时间片内同时访问,服务器也能正常工作。
【实例】使用 ServerSocket 类获取服务器的状态信息。
Java ServerSocket类的构造方法
ServerSocket():用于创建非绑定服务器套接字; ServerSocket(int port):创建绑定到特定端口的服务器套接字; ServerSocket(int port,int backlog):利用指定的backlog创建服务器套接字,并将其绑定到指定的本地端口号; ServerSocket(int port,int backlog,InetAddress bindAddr):使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。
- port 为端口号;若端口号的值为 0,表示使用任何空闲端口。
- backlog 指定服务器所能支持的最长连接队列。如果队列满时收到连接指示,则拒绝该连接。
- indAddr 是要将服务器绑定到的 InetAddress,bindAddr 参数可以在 ServerSocket 的多宿主主机(multi-homed host)上使用,ServerSocket 仅接受对其地址之一的连接请求。如果 bindAddr 为 null,则默认接受任何/所有本地地址上的连接。
创建 ServerSocket 对象的示例代码如下:
ServerSocket serverSocket = new ServerSocket(2010);
创建了一个 ServerSocket 对象 serverSocket,并将服务绑定在 2010 号端口:
ServerSocket serverSocket2 = new ServerSocket(2010, 10);创建了一个 ServerSocket 对象 serverSocket2,并将服务绑定在 2010 号端口,最长连接队列为 10。
注意,这里的 10 是队列长度,并不是只能最多 10 个客户端。实际上,即使是 1000 个客户端连接这台服务器,只要这 1000 个客户端不是在极短的时间片内同时访问,服务器也能正常工作。
Java ServerSocket类的常用方法
| 方法 | 描述 |
|---|---|
| Socket accept() | 侦听并接受此套接字的连接。 |
| void bind(SocketAddress endpoint) | 将 ServerSocket 绑定到特定地址(IP 地址和端口号)。 |
| void bind(SocketAddress endpoint, int backlog) | 在有多个网卡(每个网卡都有自己的 IP 地址)的服务器上,将 ServerSocket 绑定到特定地址(IP 地址和端口号),并设置最长连接队列。 |
| void close() | 关闭此套接字。 |
| InetAddress getInetAddress() | 返回此服务器套接字的本地地址。 |
| int getLocalPort() | 返回此套接字在其上侦听的端口。 |
| SocketAddress getLocalSocketAddress() | 返回此套接字绑定的端口的地址,如果尚未绑定则返回 null。 |
| boolean isBound() | 返回 ServerSocket 的绑定状态。 |
| boolean isClosed() | 返回 ServerSocket 的关闭状态。 |
| String toString() | 作为 String 返回此套接字的实现地址和实现端口。 |
【实例】使用 ServerSocket 类获取服务器的状态信息。
import java.io.*;
import java.net.ServerSocket;
public class ServerSocketTest {
public static void main(String args[]) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(2010);
System.out.println("服务器端口:" + serverSocket.getLocalPort());
System.out.println("服务器地址:" + serverSocket.getInetAddress());
System.out.println("服务器套接字:" + serverSocket.getLocalSocketAddress());
System.out.println("是否绑定连接:" + serverSocket.isBound());
System.out.println("连接是否关闭:" + serverSocket.isClosed());
System.out.println("服务器套接字详情:" + serverSocket.toString());
} catch (IOException e) {
System.out.println(e);
}
}
}
程序运行结果为:
服务器端口:2010
服务器地址:0.0.0.0/0.0.0.0
服务器套接字:0.0.0.0/0.0.0.0:2010
是否绑定连接:true
连接是否关闭:false
服务器套接字详情:ServerSocket[addr=0.0.0.0/0.0.0.0,localport=2010]
ICP备案:
公安联网备案: