最好能给个例子  用链表做缓冲 例子写的简单点 本人第一次接触这个东西 谢谢了

解决方案 »

  1.   

    随手编写了一个单SERVER,多个CLIENT的套接字。和楼主分享下服务器部分
    /**
     * 
     */
    package clientservermodel2;import java.io.*;
    import java.net.*;/**
     * @author super
     *
     */
    public class MultiplyServer { /**
     * @param args
     */
    //public static final int MAX_THREADS = 20;
    public static final int PORT= 1995;

    public static void main(String[] args) {
    // TODO Auto-generated method stub try{
      //产生一个ServerSocket
      ServerSocket serverSocket = new ServerSocket(PORT);
      System.out.println("A server is established..");
      try{
      //产生一Socket 对象,用它来处理和客户端的交互
      //int i=0;
      while(true){
      Socket s = serverSocket.accept();

      ConnectionHandler handler = new ConnectionHandler(s);
     
      
      }
      }
      finally{
      serverSocket.close();
      }
    }catch(IOException e){
    e.printStackTrace();
    }
    }}//专门设计一个线程类来处理和客户端的交互
    class ConnectionHandler extends Thread{
    private Socket handlerSocket ;
    private PrintWriter out;
    private BufferedReader in;

    public ConnectionHandler(Socket s){
    handlerSocket = s;
    try{
    //从这个套接字中分离出输入流和输出流
    out = new PrintWriter(
    new BufferedWriter(
    new OutputStreamWriter(s.getOutputStream())),true);
    in = new BufferedReader(
    new InputStreamReader(s.getInputStream()));
    }catch(Exception e){
    e.printStackTrace();
    }
    start();//调用RUN 方法
    }

    public void run(){
    System.out.println("Beginning dealing with interaction.....");
    try{
    //由于这个线程不知道到底处理多少次,所以只能用while形式的循环
    while(true){
    String str = in.readLine();
    //分析读入的内容
    if(str.equals("END"))
    break;
    //否则,加上内容之后返回
    System.out.println(str);
    out.println("Echo # "+str);
    }
    }catch(Exception e){
    e.printStackTrace(System.err);
    }
    finally{
    //回收这个打开的套接字
    try{
    handlerSocket.close();
    }catch(Exception e){
    e.printStackTrace(System.err);
    }
    }
    }

    }客户端部分
    /**
     * 
     */
    package clientservermodel2;
    import java.net.*;
    import java.io.*;/**
     * @author super
     *
     */
    public class MultiplyClient { /**
     * @param args
     */
    //所有的客户端的SOCKET 需要的信息应该在这个大类里面提供

    public static final int MAX_THREADS = 19;
    public static void main(String[] args) {
    // TODO Auto-generated method stub try{
    InetAddress addr = InetAddress.getByName(null);
    //ClientSocket socket = new ClientSocket(addr,MultiplyServer.PORT);
    int i = 0;
    while ( i<MAX_THREADS ){
    ClientSocket socket = new ClientSocket(addr,MultiplyServer.PORT);
    socket.sleep(100);
    i++;
    }
    }catch(Exception e){
    e.printStackTrace();
    }

    }}//专门的一个套接字类来处理和服务器端的连接
    class ClientSocket extends Thread{

    private BufferedReader in;
    private PrintWriter out;
    private Socket s;
    public ClientSocket(InetAddress addr,int PORT)
    {
    try{
        s = new Socket(addr,PORT);
        //分离出输入端和输出端
        in = new BufferedReader(
         new InputStreamReader(s.getInputStream()));
        out = new PrintWriter(
         new BufferedWriter(
         new OutputStreamWriter(s.getOutputStream())),true);
        
        //让其调用run
        this.start();
       //  s.close();
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    public void run(){
    try{
    for(int i=0;i<15;i++){
    //输入内容
    out.println("Message +# "+i);
    //读入返回的内容
    String str = in.readLine();
    System.out.println(str);
    }
    out.println("END");
    }
    catch(Exception e){
    e.printStackTrace();
    }
    finally{
    try{
    s.close();
    }catch(IOException e){
    System.err.println("Can not close socket of client");
    }
    }
    }
    }算是个套接字用法的例子吧,编的比较粗糙,呵呵