对于接受连接的服务器,Java提供了一个ServerSocket表示服务器Socket。每个服务器Socket监听服务器机器上的一个特定端口,一旦ServerSocket建立了连接,服务器会使用一个常规的Socket对象向客户端发送数据。数据总是通过常规Socket传输。
ServerSocket的基本方法
构造函数
ServerSocket()
创建非绑定服务器套接字。ServerSocket(int port)
创建绑定到特定端口的服务器套接字。ServerSocket(int port, int queueLength)
利用指定的 queueLength创建服务器套接字并将其绑定到指定的本地端口号。ServerSocket(int port, int queueLength, InetAddress bindAddr)
使用指定的端口、侦听 queueLength和要绑定到的本地 IP 地址创建服务器。
接受连接
Socket accept()
侦听并接受到此套接字的连接。
accept()
调用会阻塞。
绑定
使用无参数的构造函数后,可以将其绑定到一个端口。
void bind(SocketAddress endpoint)
将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
关闭
结束处理时一定要关闭Socket,不能依赖客户端来结束。使用完ServerSocket也应当将其关闭。
void close()
关闭此套接字。
ServerSocket选项
SO_TIMEOUT
等待入站连接的时间。
int getSoTimeout()
返回 SO_TIMEOUT 的设置。void setSoTimeout(int timeout)
启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。
SO_REUSEADDR
关闭 TCP 连接时,该连接可能在关闭后的一段时间内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态)。对于使用已知套接字地址或端口的应用程序而言,如果存在处于超时状态的连接(包括地址和端口),可能不能将套接字绑定到所需的 SocketAddress 上。
boolean getReuseAddress()
测试是否启用 SO_REUSEADDR。void setReuseAddress(boolean on)
启用/禁用 SO_REUSEADDR 套接字选项。
SO_RCVBUF
设置服务器Socket接受客户端Socket默认接收缓冲区大小。
int getReceiveBufferSize()
获取此 Socket 的 SO_RCVBUF 选项的值,该值是平台在 Socket 上输入时使用的缓冲区大小。void setReceiveBufferSize(int size)
将此 Socket 的 SO_RCVBUF 选项设置为指定的值。