Java网络编程从入门到精通(25):创建ServerSocket对象
2009-09-22 00:00:00 来源:WEB开发网从第二步的运行结果可以看出,当TestRequestQueue创建两个Socket连接之后,服务端的请求队列已满,并且服务端暂时无法继续执行(由于System.in.read()的原因而暂停程序的执行,等待用户的输入)。因此,服务端程序无法再接收客户端请求。这时 TestRequestQueue抛出了一个SocketException异常。在TestRequestQueue已经创建成功的两个Socket连接已经保存在服务端的请求队列中。在这时按任意键继续执行SetRequestQueue。accept方法就会从请求队列中将这两个客户端请求队列中依次读出来。从第三步的运行结果可以看出,服务端处理完这两个请求后(一个<…>包含的就是一个处理过程),请求队列为空,这时accept处理阻塞状态,等待接收第三个客户端请求。如果这时再运行TestRequestQueue,服务端会接收几个客户端请求呢?如果将请求队列的长度设为大于 10的数,TestRequestQueue的运行结果会是什么呢?读者可以自己做一下这些实验,看看和自己认为的结果是否一致。
三、绑定IP地址
在有多个网络接口或多个IP地址的计算机上可以使用如下的构造方法将服务端绑定在某一个IP地址上:
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
bindAddr参数就是要绑定的IP地址。如果将服务端绑定到某一个IP地址上,就只有可以访问这个IP地址的客户端才能连接到服务器上。如一台机器上有两块网卡,一块网卡连接内网,另一块连接外网。如果用Java实现一个Email服务器,并且只想让内网的用户使用它。就可以使用这个构造方法将 ServerSocket对象绑定到连接内网的IP地址上。这样外网就无法访问Email服务器了。可以使用如下代码来绑定IP地址:
更多精彩
赞助商链接