首页 > 编程笔记 > Java笔记 阅读:28

Java ServerSocket类的用法(附带实例)

Java 中的 ServerSocket 类实现了服务器端套接字。ServerSocket 对象监听网络中来自客户机的服务请求,根据请求建立连接,并根据服务请求运行相应的服务程序。

Java ServerSocket类的构造方法

ServerSocket():用于创建非绑定服务器套接字;
ServerSocket(int port):创建绑定到特定端口的服务器套接字;
ServerSocket(int port,int backlog):利用指定的backlog创建服务器套接字,并将其绑定到指定的本地端口号;
ServerSocket(int port,int backlog,InetAddress bindAddr):使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。

创建 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]

通过观察程序的执行结果,可以发现服务器的地址 addr 为 0.0.0.0/0.0.0.0,localport 值为 2010,port 的值为 0。其中,addr 是服务端绑定的 IP 地址。如果未绑定 IP 地址(一台服务器上往往有多个网卡,每个网卡都有相应的 IP 地址),则 addr 的值就是 0.0.0.0。在这种情况下,ServerSocket 对象将监听服务端所有网络接口(网卡)的所有 IP 地址。port 永远是 0,localport 是 ServerSocket 绑定的本机端口。

相关文章