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

Java套接字编程(上)(3)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
ServerSocket类 由于SSClient使用了流套接字,所以服务程序也要使用流套接字。这就要创建一个ServerSocket对象,ServerSocket有几个构造函数,最简单的是ServerSocket(int port),当使用ServerSocket(i

  ServerSocket类
  
  由于SSClient使用了流套接字,所以服务程序也要使用流套接字。这就要创建一个ServerSocket对象,ServerSocket有几个构造函数,最简单的是ServerSocket(int port),当使用ServerSocket(int port)创建一个ServerSocket对象,port参数传递端口号,这个端口就是服务器监听连接请求的端口,假如在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始预备接收连接请求。
  
  接下来服务程序进入无限循环之中,无限循环从调用ServerSocket的accept()方法开始,在调用开始后accept()方法将导致调用线程阻塞直到连接建立。在建立连接后accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。
  
  由于存在单个服务程序与多个客户程序通讯的可能,所以服务程序响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通讯的建立,然而服务程序和客户程序的会话有可能是很长的(这与电话类似),因此为加快对客户程序连接请求的响应,典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务程序和客户程序的通讯。
  
  为了示范我们在上面谈到的慨念并完成SSClient程序,下面我们创建一个SSServer程序,程序将创建一个ServerSocket对象来监听端口10000的连接请求,假如成功服务程序将等待连接输入,开始一个线程处理连接,并响应来自客户程序的命令。下面就是这段程序的代码:
  
  Listing 3: SSServer.Java
  
  // SSServer.java
  
  import java.io.*;
  import java.net.*;
  import java.util.*;
  
  class SSServer
  {
   public static void main (String [] args) throws IOException
   { 
  System.out.println ("Server starting... ");
  
  // Create a server socket that listens for incoming connection
  // requests on port 10000.
  
  ServerSocket server = new ServerSocket (10000);
  
  while (true)
  {
   // Listen for incoming connection requests from client
   // programs, establish a connection, and return a Socket
   // object that represents this connection.
  
   Socket s = server.accept ();
  
   System.out.println ("Accepting Connection... ");
  
   // Start a thread to handle the connection.
  
   new ServerThread (s).start ();
  }
   }
  }
  
  class ServerThread extends Thread
  {
   private Socket s;
  
   ServerThread (Socket s)
   {
  this.s = s;
   }
  
   public void run ()
   {
  BufferedReader br = null;
  PrintWriter pw = null;
  
  try
  {
   // Create an input stream reader that chains to the socket's
   // byte-oriented input stream. The input stream reader
   // converts bytes read from the socket to characters. The
   // conversion is based on the platform's default character
   // set.
  
   InputStreamReader isr;
   isr = new InputStreamReader (s.getInputStream ());
  
   // Create a buffered reader that chains to the input stream
   // reader. The buffered reader supplies a convenient method
   // for reading entire lines of text.
  
   br = new BufferedReader (isr);
  
   // Create a print writer that chains to the socket's byte-
   // oriented output stream. The print writer creates an
  
精彩图集

赞助商链接