Client 
package ChatIV;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client1 {    public static void main(String args[])
    {
     try 
     {
            Socket s = new Socket("127.0.0.1",8186);//创建Socket端口8186,端口号随意,避免常用端口即可
            PrintWriter out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream()
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
            String readline;    
            while(true)
     {  
             readline=sin.readLine(); 
             if(readline==null)
             continue;
             else
     {
             out.println(readline); 
             out.flush(); 
     }          
             System.out.println("Server:"+in.readLine());     
     } 
        } catch (Exception e) {
            e.printStackTrace();        
        }
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Serverpackage ChatIV;
import java.net.*;
import java.io.*;
import java.util.*;public class Server 
{
    public static void main(String args[])
    {
        try 
        {
            ServerSocket ss = new ServerSocket(8186);//实现Socket
            List sockets = new ArrayList();//创建一个集合,保存文字消息
            while(true)
            {
                Socket s = ss.accept();//监听8186
                sockets.add(s);//向集合中添加Socket的对象S,把听到的内容保存到集合中
                Thread t1 = new ChatThread(s,sockets);//线程
                t1.start();
            }
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }    
}
class ChatThread extends Thread
{
    Socket s;
    List sockets;
    public ChatThread(Socket s,List sockets)
    {
        this.s=s;
        this.sockets=sockets;
    }
    public void run()
    {
        try 
        {
         BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
         while(true)
         {
                String str = in.readLine();//读BufferedReader
                for(int i=0;i<sockets.size();i++)
                {//利用For循环遍历集合
                    Socket s2 = (Socket)sockets.get(i);//创建Socket对象S2,强转成Socket,并获取下标
                    PrintWriter out = new PrintWriter(s2.getOutputStream());//文本流输出
                    out.println(str);//打印字符
                    out.flush();//刷新该流的缓冲
                }
         }
        } 
        catch (IOException e) {}
        finally
        {
            try 
            {
                s.close();
            } 
            catch (IOException e) {}
        }
    }
}一个简单的聊天室,当开2个client以上就显示不正常了,大家帮我看看

解决方案 »

  1.   

    没错,只是显示不正常,具体显示是这样client1
    发内容:1
    显示:1
    发内容:2
    显示:2
    发内容:3
    显示:3
    发内容:x
    显示:x
    client2
    发内容:4
    显示:1
    发内容:5
    显示:2
    发内容:6
    显示:3
    发内容:7
    显示:x
    发内容:8
    显示:4
      

  2.   

    我要的是同步的,client1发送A的话,client2也要显示A出来
      

  3.   

    你这个List应该放到ChatThread里做保存,感觉你这么写List里的值永远只是第一个进程的
      

  4.   

    你看清楚,list是在ss.accept();//下面,每次有连接过来都会加进list里面的