JavaSocket编程(三)
服务器套接字
列表9.2是服务器应用程序的一部分。
List 9.2一个简单的服务器程序
/**
*一个监听端口并提供HTML文档的程序。
*/
class simple Web Server {[public static void main(String args[])
{
Server socket Server socket = null;
套接字clientSocket = null
int connects = 0;
try
{
{
/建立服务器套接字
server socket = new server socket(80,5);
while(connections < 5)
{
/等待连接
client socket = server socket . accept();
//服务连接
服务客户端(客户端套接字);
连接++;
}
server socket . close();
}
catch(io exception ioe)
{
system . out . println(" simple web server中的错误:"+ioe);
}
}
public static void service client(Socket client)
throws io exception
{
data inputstream inbound = null;
data output stream outbound = null;
try
{
/get IO stream
inbound = newdatainputstream(client . getinputstream());
outbound = new data output stream(client . get output stream());
//打印格式(响应头和少量HTML文档)
string buffer buffer = prepare output();
字符串输入行;
while((input line = inbound . readline())!= null)
{
/如果到达HTTP请求的末尾,则发送响应
if (input.equals(" ")
{
outbound . write bytes(buffer . tostring());
break;
}
}
}
finally
{
system . out . println("清理连接:"+client);
tln("清理连接:"+client);
outbound . close();
inbound . close();
client . close();
client . close();
}
}
服务器套接字
服务器不会主动建立连接。相反,它们被动地监听客户端的连接请求,然后给它们提供服务。服务器是由类ServerSocket建立的。下面的程序建立一个服务器端套接字并绑定到80端口:
server socket server socket = New server socket(80,5);
第一个参数是服务器想要监听的端口。第二个参数是可选的。API文档声明这是一个监听时间,但是第二个参数是传统套接字程序中的监听深度。一个服务器可以同时接收多个连接请求,但一次只能处理一个。监听堆是一个没有应答的连接请求队列。上面的请求建立了一个连接来处理最后五个请求。如果省略后一个参数,默认值为50。
Server Socket Server Socket = New Server Socket(80,5);
一旦套接字建立并开始侦听连接,传入的连接将被建立并放置在侦听堆中。accetp()方法取出堆中的连接。
Socket客户端Socket = server Socket . accept();
此方法返回用于与访问者对话的客户端连接。服务器本身不可能建立对话。相反,服务器套接字将使用accept()方法来生成新的套接字。服务器套接字仍将打开,并对新的连接请求进行排队。和客户端套接字一样,下一步是建立输入和输出流:
数据输入流inbound =新数据输入流(client socket . getinputstream()
);data output Stream outbound = new data output Stream(client socket . get output
Stream());
一般的I/O操作可以在新创建的流中使用。在服务器响应之前,它等待客户端发送空白线。当会话结束时,服务器关闭流和客户端套接字。如果队列中没有请求会发生什么?那种方法将等待一个的到来。这种行为称为阻塞。accept()方法将阻塞服务器线程,直到调用到达。当处理并关闭五个连接时,服务器退出。队列中的所有呼叫都将被取消。
所有服务器都有以下基本步骤:
1 .设置一个服务器套接字并开始监听。
2。使用accept()方法获取新的连接。
3。设置输入和输出流。br 5。关闭客户端流和套接字。
6。回到步骤2或步骤7。
7。关闭服务器套接字。
0条评论