龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java Socket编程(三) 服务器Sockets[组图]

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
服务器Sockets 列表9.2是一个服务器应用程序的一部分. 列表9.2 一个简单的服务器程序 /** * 一个监听端口并提供Html文档的程序. */ class SimpleWebServer { public static void main(String args[]) { !-- fram
服务器Sockets
  
   列表9.2是一个服务器应用程序的一部分.
  
   列表9.2 一个简单的服务器程序
  
   /**
   * 一个监听端口并提供Html文档的程序.
   */
   class SimpleWebServer {
   public static void main(String args[])
   {
   <!-- frame contents -->
<!-- /frame contents --> ServerSocket serverSocket = null;
   Socket clientSocket = null;
   int connects = 0;
   try
   {
   {
   // 建立一个服务器socket
   serverSocket = new ServerSocket(80, 5);
   while (connects < 5)
   {
   // 等待连接
   clientSocket = serverSocket.accept();
   //服务连接
   ServiceClient(clientSocket);
   connects++;
   }
   serverSocket.close();
   }
   catch (IOException ioe)
   {
   System.out.println("Error in SimpleWebServer: " + ioe);
   }
   }
   public static void ServiceClient(Socket client)
   throws IOException
   {
   DataInputStream inbound = null;
   DataOutputStream outbound = null;
   try
   {
   // 得到IO流
   inbound = new DataInputStream( client.getInputStream());
   outbound = new DataOutputStream( client.getOutputStream());
   //格式化输出(回应头和很少的HTML文档)
   StringBuffer buffer = PrepareOutput();
   String inputLine;
   while ((inputLine = inbound.readLine()) != null)
   {
   //假如到了HTTP请求的尾部,就发送回应
   if ( inputLine.equals("") )
   {
   outbound.writeBytes(buffer.toString());
   break;
   }
   }
   }
   finally
   {
   // 清除
   System.out.println("Cleaning up connection: " + client);
   tln("Cleaning up connection: " + client);
   outbound.close();
   inbound.close();
   client.close();
   client.close();
   }
   }
   服务器并不是主动地建立连接.相反地,他们是被动地监听一个客户端的连接请示然后给他们服务.服务器是由类ServerSocket来建立的.下面的程序建立了一个服务器端socket并把它绑定到80端口:
  
   ServerSocket serverSocket = new ServerSocket(80, 5);
  
   <!-- frame contents -->
<!-- /frame contents --> 第一个参数是服务器要监听的端口.第二个参数是可选的.API文档中说明了这是一个监听时间,但是在传统的socket程序中第二个参数是监听深度.一个服务器可以同时接收多个连接请求,但是每次只能处理一个.监听堆是一个无回答的连接请求队列.上面的请求建立一个连接来处理最后五个请求.假如省略了后面的一个参数,则默认值是50.
  
   ServerSocket serverSocket = new ServerSocket(80, 5);
  
   一旦socket建立了并开始监听连接,进来的连接将会建立并放在监听堆.accetp()方法把在堆中的连接取出来.
  
   Socket clientSocket = serverSocket.accept();
  
  
精彩图集

赞助商链接