晕倒,serversocket一般只用一个端口,你倒好,每次都重新生成一个不同端口的serversocket......
public void run() {
try {
ss = new ServerSocket(port); //这个要放到循环
while (true) {System.out.println("正在等待连接.....");
client = ss.accept();
new Thread(){
    public void run(){
        new ChatFrame(name, client).setVisible(true);
    }
}.start();
}
} catch (IOException ioe1) {
System.out.println("Can't set up user thread" + ioe1);
}
这只是针对你的优化,像你这种Swing程序,尽量少用Thread

解决方案 »

  1.   

    你的ChatFrame是阻塞的吧?
    ServerSocket监听那里的
    new ChatFrame(name, client).setVisible(true);
    这句话一执行,直到你的这个窗口关闭,下面的代码都不走了
    (这要根据你的ChatFrame怎么写的来决定)解决办法
    开个线程去启动ChatFrame
      

  2.   

    登录的时候,发个广播,周知一下上线,然后各个已登录的人把该新人的ip,服务socket端口号之类的记下来,并且把自己的信息返回给此新人,让他知道有哪些人在线
      

  3.   

    C/S的聊天程序以前在学校时就做过,
    跟你分享下我的以前做这个的思路:
    socket的TCP同步方式:
    并非客户端直接发数据给客户端而是通过服务端进行转发;
    客户端发送数据给服务端,进而由服务端再转发到该数据的接收者,
    服务端要开两个线程,一个用于开端口监听客户端的连接,另一个用于读取客户端发送的数据进而进行转发。
    监听的线程没监听到一个客户端连接上就将此客户端的socket放入Map集合中并启动一个读取这个socket数据的线程。以便后面的数据的传输。
    客户端将数据放到封装的数据类(javabean)的对象中,用ObjectOutputStream把这个对象发送到服务端。
    大体的思路是这样,更多细节的东西可以加我QQ:372267279交流