Java网络编程从入门到精通(25):创建ServerSocket对象
2009-09-22 00:00:00 来源:WEB开发网在上面的代码中输出了创建ServerSocket对象时抛出的异常类的信息。ScanPort通过命令行参数将待扫描的端口号范围传入程序,参数格式为:minPort-maxPort,如果只输入一个端口号,ScanPort程序只扫描这个端口号。
测试
java server.ScanPort 1-1023
运行结果
class java.net.BindException
端口80已经打开!
class java.net.BindException
端口135已经打开!
二、设置请求队列的长度
在编写服务端程序时,一般会通过多线程来同时处理多个客户端请求。也就是说,使用一个线程来接收客户端请求,当接到一个请求后(得到一个 Socket对象),会创建一个新线程,将这个客户端请求交给这个新线程处理。而那个接收客户端请求的线程则继续接收客户端请求,这个过程的实现代码如下:
ServerSocket serverSocket = new ServerSocket(1234); // 绑定端口
// 处理其他任务的代码
while(true)
{
Socket socket = serverSocket.accept(); // 等待接收客户端请求
// 处理其他任务的代码
new ThreadClass(socket).start(); // 创建并运行处理客户端请求的线程
}
上面代码中的ThreadClass类是Thread类的子类,这个类的构造方法有一个Socket类型的参数,可以通过构造方法将Socket对象传入ThreadClass对象,并在ThreadClass对象的run方法中处理客户端请求。这段代码从表面上看好象是天衣无缝,无论有多少客户端请求,只要服务器的配置足够高,就都可以处理。但仔细思考上面的代码,我们可能会发现一些问题。如果在第2行和第6行有足够复杂的代码,执行时间也比较长,这就意味着服务端程序无法及时响应客户端的请求。
更多精彩
赞助商链接