socket 类表示的是客户端的socket。无论什么时候,只要你想连接到一个远程服务器的应用,你都要构建一个socket。如果你想执行一个服务器应用程序,比如http服务或者ftp服务的程序,那么你需要使用不同的途径。因为你的服务器必须一直是开机闲置,所以它不知道什么时候客户机试图来连接它。
这个时候,需要使用java.net.serversocket 类。它会实现一个服务器socket。一个服务器socket会等待来自客户端的连接。一旦它接收到一个连接请求,它就会创建一个 socket 实例来处理和客户端通讯的问题。
要创建一个服务器socket,可以使用四种serversocket类构造方法中的一种来实现。你需要制定服务器socket监听的ip地址和端口。 典型的,ip地址如果是127.0.0.1,意味着服务器socket将监听本地机器。这个被监听的ip地址被认为是一种绑定地址。server socket的另一个重要属性是它的 backlog属性,它是在server socket拒绝连接请求前,能够接受的连接请求的最大队列长度。
serversocket类的构造函数之一如下:
public serversocket(int port, int backlog, inetaddress bindingaddress);
对于这个构造函数而言,绑定地址必须是java.net.inetaddress 的一个实例。一个简单的办法是通过调用它的静态方法getbyname来构造一个inetaddres对象。该方法来一个包含主机名的字符串参数:
inetaddress.getbyname("127.0.0.1");
下面一行代码构造一个serversocket ,它监听本地机器的8080端口,backlog设置为1。
new serversocket(8080, 1, inetaddress.getbyname("127.0.0.1"));
一旦有了一个 serversocket 实例,可以通过调用accept方法来告诉它等待进来的连接请求。这个方法只有在有一个连接请求时才返回。它返回的是socket类的实例。这个socket对象能够发送和接受来自客户端应用的字节流,就是第一节所讲到的socket类。实际上,accept 是本文提及的唯一一个在应用中使用的方法。
application应用
我们的web服务器应用是ex01.pyrmont包的一部分,包含三个类:
httpserver
request
response
这个应用的入口(静态main方法)是httpserver类。它创建了一个httpserver 实例来调用它的await方法。 就象这个方法名所暗示的,await 方法在一个指定的端口等待一个http请求,并处理它们,然后发送回应给客户端。它保持等待状态,直到收到一个shutdown命令。 (命令名await来代替wait的原因是wait是system.object类中的一个用于线程方面的重要方法)
应用仅仅只发送静态资源,比如来自特定目录的html和图片文件。不支持动态包头 (比如日期或者cookie) 。
商业源码热门下载www.html.org.cn
新闻热点
疑难解答