一.构造ServerSocket
-
构造方法
(1)new ServerSocket( )
(2)new ServerSocket(int port,int backlog)
(3)new ServerSocket(int port,int backlog,InetAddress bindAddr)除第一种方法外,其他都会立即尝试绑定端口.第一种方便添加ServerSocket的参数,bind(SocketAddress address)手动绑定端口
设定客户端连接请求队列长度
管理客户连接请求的任务是操作系统完成的,操作系统把连接请求存在一个队列中.该队列默认长度为50,当超过这个队列的长度限制时,操作系统会拒绝新的客户端连接请求.只有当ServerSocket的accept()方法从就绪队列中取出连接,使得队列有空位置时才能继续加入新请求.
SoerSocket构造方法中的backlog参数显式指定请求队列的长度.当一下2种情况,该参数值无效 :
(1)backlog值 > 操作系统的最大队列长度
(2)backlog参数值小于等于0-
关闭ServerSocket
Serversocet的close( )方法是服务器释放占用的端口,并断开与所有客户的连接.当开启ServerSocket的线程执行完毕,ServerSocket会自动关闭.只要一个ServerSocket对象与一个端口绑定过,无论其是否已经close,isBound()方法永远返回true.所以判断ServerSocket是否正在与端口绑定:serverSocket.isBound() && !serverSocket.isClosed()
二. ServerSocket选项
- SO_TIMEOUT
该参数表示ServerSocket的accept()方法等待客户端连接的超时时间,该值默认为0,永不超时. 服务器的ServerSocket的accecpt()方法在没有客户端连接请求时会阻塞,只有接受了一个客户端请求,才能从accecpt()方法返回.setServerSocket(6*1000)表示accept()方法在阻塞6秒后一定返回,若没有客户端连接,抛出SocketTimeoutExeption - SO_REUSEADDR选项
- SO_RCVBUF选项
设定接收数据的缓冲区大小