先看代码
《MultiJabberServer》import java.io.*;
import java.net.*;public class MultiJabberServer
{    static final int PORT = 8080;    public static void main(String[] args)
            throws IOException
    {
        ServerSocket s = new ServerSocket(PORT);
        System.out.println("==服务端开始==");
        try
        {
            while (true)
            {
                Socket socket = s.accept();
                try
                {
                    new ServeOneJabber(socket);
                }
                catch (IOException e)
                {
                    socket.close();
                }
            }
        }
        finally
        {
            s.close();
        }
    }

《ServeOneJabber》
import java.io.*;
import java.net.*;public class ServeOneJabber extends Thread
{    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;    public ServeOneJabber(Socket s)
            throws IOException
    {
        socket = s;
        in =
                new BufferedReader(
                new InputStreamReader(
                socket.getInputStream()));
        out =
                new PrintWriter(
                new BufferedWriter(
                new OutputStreamWriter(
                socket.getOutputStream())), true);
        start();
    }    @Override
    public void run()
    {
        try
        {
            while (true)
            {
                String str = in.readLine();
                if (str.equals("END"))
                {
                    break;
                }
                System.out.println("==输出==" + str);
                out.println(str);
            }
            System.out.println("==客户端退出了==");
        }
        catch (IOException e)
        {
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch (IOException e)
            {
                System.out.println("==客户端意外掉线了==");
            }
        }
    }
}本人学生
有个问题是:
现在假设有两个客户端连接进来了  分别是A和B
现在A传了个值给服务器
我怎么做才能把这个值传给B?
小弟不懂 new ServeOneJabber(socket)后
直接交给线程start()了
我怎么区分A和B?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zjkboy】截止到2008-07-25 20:46:53的历史汇总数据(不包括此帖):
    发帖的总数量:12                       发帖的总分数:180                      每贴平均分数:15                       
    回帖的总数量:7                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:10                       结贴的总分数:140                      
    无满意结贴数:3                        无满意结贴分:50                       
    未结的帖子数:2                        未结的总分数:40                       
    结贴的百分比:83.33 %               结分的百分比:77.78 %                  
    无满意结贴率:30.00 %               无满意结分率:35.71 %                  
    楼主加油
      

  2.   

    服务器每接到一个连接socket 就把它放进一个HashMap,找个东西作为key。服务器的作用就是做消息转发,每次转发都到HashMap里面去找socket。
      

  3.   

    你每当客户端连接进服务器时就会有一个socket,假如发消息用send字符做命令,传的数据中用命令加客户端的标记例如sendA,表示A客户端要发数据(命令和标记格式可以自己设计)。服务器查询命令和标记就放到相应的队列中,有两个队列
    A ,B 。放A和B客户端的发送数据,收到客户端的命令为getA时表示B客户端要取A发送的数据,就从A队列取数据发给B客户端。
    也可以在收到A的发送命令后就直接发给B。不放在队列中。
      

  4.   

    你每当客户端连接进服务器时就会有一个socket,假如发消息用send字符做命令,传的数据中用命令加客户端的标记例如sendA,表示A客户端要发数据(命令和标记格式可以自己设计)。服务器查询命令和标记就放到相应的队列中,有两个队列 
    A ,B 。放A和B客户端的发送数据,收到客户端的命令为getA时表示B客户端要取A发送的数据,就从A队列取数据发给B客户端。 
    也可以在收到A的发送命令后就直接发给B。不放在队列中。
      

  5.   

    ServerSocket ss = new ServerSocket(12001);
       while(true) {
    Socket sc = ss.accept();
    System.out.println("IP :"+sc.getInetAddress()+"Connet success!");
    new ConnThread(sc).start();
    //ConnThread类
    class ConnThread(Scoket sc) {
        new Reader (this,sc.getInputStream()).start();
        wri = new Writer(sc.getOutputStream()).start();
    }//Reader类
    public void run () {
    try {
    while((count = is.read(buffer)) != -1) {
    System.out.println("服务器接收到"+new String(buffer,0,count));
    deal(str);//处理分解后的消息
    }
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();

    }
      

  6.   

    ServerSocket 在主线程里面new的。ConnThread 是个线程,reader和Writer都是他的子线程。
      

  7.   


    List<myThread> list = new LinkedList<myThread>()
     while (true) 
      { 
          Socket socket = s.accept(); 
          myThread  mt = new myThread(socket)
          list.add(mt);
          list.get(list.size-1).start();
      } class myThread extend Thread{ Socket sk public myThread(Socket sk){
       this.sk = sk;
     }
     public void run()
     {
       ....
       //自己处理
     }
    }没测试过的...