socket 学习二(多个客户同时连接)

在实际的网络环境里,同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能够同时响应多个客户端的连接请求。在java中,实现以上功能特点是非常容易的。

设计原理:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。运用Thread类或Runnable接口来实现是不错的办法。

 

 

//程序监听10000端口,并将接入交给CreateServerThread线程运行。
//CreateServerThread线程接受输入,并将输入回应客户,直到客户输入"bye",线程结束。
//我们可以在createMessage方法中,对输入进行处理,并产生结果,然后把结果返回给客户。

import java.io.*;
import java.net.*;

public class Server extends ServerSocket{

      private static final int SERVER_PORT = 10000;

      public Server() throws IOException{
            super(SERVER_PORT);
            try{
                  while (true){
                        Socket socket = accept();
                        new CreateServerThread(socket);
                  }
            }catch (IOException e){
            }finally{
                  close();
            }
      }

     //--- CreateServerThread
     class CreateServerThread extends Thread{

           private Socket client;
           private BufferedReader in;
           private PrintWriter out;

           public CreateServerThread(Socket s) throws IOException{
               client = s;
               in = new BufferedReader(newInputStreamReader(client.getInputStream(), "GB2312"));
               out = new PrintWriter(client.getOutputStream(), true);
               out.println("--- Welcome ---");
               start();
           }

           public void run(){
               try{
                   String line = in.readLine();
                   while (!line.equals("bye")){
                       String msg = createMessage(line);
                       out.println(msg);
                       line = in.readLine();
                    }
                    out.println("--- See you, bye! ---");
                    client.close();
                }catch (IOException e){}
            }

          private String createMessage(String line){
                       xxxxxxxxx;
          }
    }
       
    public static void main(String[] args) throws IOException{
            new Server();
    }
}
 

 

 

你可能感兴趣的:(java)