您的位置:首页 > 理论基础 > 计算机网络

Java网络编程学习笔记(3)ServerSocket用法详解

2014-07-17 00:00 337 查看
ServerSocket用法详解

ServerSocket负责接受客户端连接请求

ServerSocket构造:
ServerSocket()

ServerSocket(intport)

ServerSocket(intport, int backlog)

ServerSocket(intport, int backlog, InetAddressbindAddr)
port绑定的端口,backlog客户请求的队列长度,bindAddr服务器绑定的IP地址

(1)绑定端口

a) 构造时会让serverSocket绑定一个端口,无法绑定端口会发出BindException,通常造成这个状况的愿意是端口被其他服务程序占用,有些端口不能被随便使用.

(2)设定客户端请求列队长度

a) 管理客户请求的任务是由操作系统决定的,操作系统把请求储存在FIFO的队列中,当队列满时只有ServerStocket的accept方法获取请求后才能继续向队列加入请求.虽然队列长度是由操作决定的(WIN 为50个),但是ServerStock的队列长度参数是可以覆盖系统规定的长度,但以下几种情况还是会采取系统长度:

i. 大于系统限定的最大长度

ii. 小于等于0

iii.没有采用有长度的构造

(3)绑定IP地址

a) 如果一台机器在局域网内,可以使用局域网的IP地址,使用构造4可以实现自定义绑定IP地址.

(4)Stock和ServerStock的默认构造使用

a) 因为如果绑定了端口有一些设置就无法生效了.比如SO_REUSEADDR,所以需要这种不绑定端口的默认构造,然后使用bind(InetStocketAddress(int)) 方法绑定一个端口

接受和关闭与客户的连接

(1) 使用ServerStock的accept方法从请求列队中取得一个客户连接,如果队列中没有请 求连接的话accept会阻塞.

(2)使用close方法会使得释放占用的端口,isClose方法会检查是否已经关闭.

获取ServerSocket的信息

(1)使用getInetAddress方法获得绑定的Ip地址

(2)使用getLocalPort 方法获得绑定的端口
使用这个方法可以将匿名端口获得(构造绑定端口时设置为0,系统会随即分配一个端口)

ServerSocket选项

(1)SO_TIMEOUT(accept等待延迟时间)

setSoTimeout(int)毫秒做单位,不设置accept会一直阻塞等待下去,而是设置后会在超过等待时间抛出SocketTimeoutException,0是永远不会超时.

(2)SO_REUSEADDR(是否延时关闭)

setReuseAddress(false)同Socket,决定如果网络上仍有数据向旧 ServerSocket传输数据,是否允许新的ServerSocket绑定到旧的ServerSocket 相同的端口上.在bind端口前用

(3)SO_RCVBUF(设置接受缓冲区大小)

setReceiveBufferSize(int)同stock的,单位字节kb
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息