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

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

你可能感兴趣的:(java,编程,socket,网络,服务器,任务)