服务器如果需要同时跟多个客户端会话,服务器端就需要循环调用ServerSocket.accept()方法进行不断的监听处理;另外如果服务器端程序与每个客户端的会话过程不能互相影响的话,就需要启动多个线程分别处理每个请求 
下面给个例子(发送一行文本字符,服务器端返回倒序的文本): 
1.ReverseServer.java文件 
Java代码  
  1. package cn.com;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.ServerSocket;  
  5. import java.net.Socket;  
  6.   
  7. public class ReverseServer {  
  8.   
  9.     public static void main(String[] args) {  
  10.   
  11.         try {  
  12.             ServerSocket ss = new ServerSocket(8001);  
  13.   
  14.             boolean bRunning = true;  
  15.   
  16.             while (bRunning) {  
  17.                 Socket s = ss.accept();  
  18.                 new Thread(new Servicer(s)).start();  
  19.             }  
  20.             ss.close();  
  21.   
  22.         } catch (IOException e) {  
  23.             // TODO Auto-generated catch block  
  24.             e.printStackTrace();  
  25.         }  
  26.   
  27.     }  
  28. }  


2.Servicer.java文件 
Java代码  
  1. package cn.com;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStream;  
  8. import java.io.PrintWriter;  
  9. import java.net.Socket;  
  10.   
  11. public class Servicer implements Runnable {  
  12.     Socket s;  
  13.   
  14.     public Servicer(Socket s) {  
  15.         this.s = s;  
  16.     }  
  17.   
  18.     @Override  
  19.     public void run() {  
  20.         // TODO Auto-generated method stub  
  21.   
  22.         try {  
  23.             InputStream ips = s.getInputStream();  
  24.             OutputStream ops = s.getOutputStream();  
  25.   
  26.             BufferedReader br = new BufferedReader(new InputStreamReader(ips));  
  27.                           //需要启动自动flush功能  
  28.             PrintWriter pw = new PrintWriter(ops,true);  
  29.             while (true) {  
  30.                 String strLine = br.readLine();  
  31.                 if (strLine.equalsIgnoreCase("quit")) {  
  32.                     break;  
  33.                 }  
  34.                 System.out.println("strLine =="+strLine);  
  35.                 String strEcho = (new StringBuffer(strLine).reverse())  
  36.                         .toString();  
  37.   
  38.                 pw.println(strLine + "---->>>" + strEcho);  
  39.                   
  40.   
  41.             }  
  42.   
  43.             br.close();  
  44.             pw.close();  
  45.         } catch (IOException e) {  
  46.             // TODO Auto-generated catch block  
  47.             e.printStackTrace();  
  48.         }  
  49.   
  50.     }  
  51.   
  52. }  

    当服务端运行起来后,我们就可以模拟客户端来测试: 
Java代码  
  1. cmd---->telnet 127.0.0.1 8001---->输入一行字符,回车就会看到效果  
posted on 2011-04-15 13:47  kitea  阅读(151)  评论(0)    收藏  举报