ServerSocket用来表示双向连接的服务端,在客户/服务器通信模式中,服务器端需要创建监听特定端口的ServerSocket,ServerSocket负责接收客户连接请求。在类ServerSocket中有如下三个构造方法。
■ ServerSocket(int port)。
■ ServerSocket(int port,int backlog)。
■ ServerSocket(int port,int backlog,InetAddress bindAddr)。
参数port指定服务器要绑定的端口(服务器要监听的端口),参数backlog指定客户连接请求队列的长度,参数bindAddr指定服务器要绑定的IP地址。
除了第一个不带参数的构造方法以外,其他构造方法都会使服务器与特定端口绑定,该端口由参数port指定。例如下面的代码创建了一个与80端口绑定的服务器。
如果运行时无法绑定到80端口,以上代码会抛出IOException异常,更确切地说是抛出BindException异常。BindException是IOException的子类,这种异常通常是由下面的原因造成的。
■ 端口已经被其他服务器进程占用。
■ 在某些操作系统中,如果没有以超级用户的身份来运行服务器程序,那么操作系统不
允许服务器绑定到1~1023之间的端口。(www.xing528.com)
如果把参数port设为0,表示由操作系统来为服务器分配一个任意可用的端口。由操作系统分配的端口也称为匿名端口。多数服务器会使用明确的端口,而不会使用匿名端口,因为客户程序需要事先知道服务器的端口,才能方便地访问服务器。
1.设定绑定的IP地址
如果主机只有一个IP地址,那么默认情况下,服务器程序就与该IP地址绑定。ServerSocket的第4个构造方法ServerSocket(int port,int backlog,InetAddress bindAddr)中有一个bindAddr参数,它可以显式指定服务器要绑定的IP地址,该构造方法适用于具有多个IP地址的主机。假定一个主机有两个网卡,一个网卡用于连接到Internet,IP地址为222.66.5.94还有一个网卡用于连接到本地局域网,IP地址为192.168.3.4。如果服务器仅仅被本地局域网中的客户访问,那么可以按如下方式创建ServerSocket。
2.默认构造方法的作用
ServerSocket有一个不带参数的默认构造方法。通过该方法创建的ServerSocket不与任何端口绑定,接下来还需要通过bind()方法与特定端口绑定。
默认构造方法bind()的用途是,允许服务器在绑定到特定端口之前,先设置ServerSocket的一些选项。因为一旦服务器与特定端口绑定,有些选项就不能再改变了。
例如在下面的代码中,先把ServerSocket的SO_REUSEADDR选项设为true,然后再把它与8000端口绑定。
如果把以上程序代码改为
那么方法serverSocket.setReuseAddress(true)就不会起任何作用,因为SO_REUSEADDR选项必须在服务器绑定端口之前设置才会有效。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。