使用套接字编程在java中的聊天程序

时间:2012-06-13 18:16:43

标签: java sockets networking tcp

这是我程序的服务器端代码,问题是,它接受一个客户端。当连接另一个客户端时,isConnected方法返回true,但服务器不从服务器获取消息。请帮助我,因为这是我在netbeans中的第一个java程序,我刚学完核心java。

class Conn extends Thread{
        ServerSocket ss;
        Socket s;
        public void run()
        {
            status.setText(status.getText()+"connecting");
            try{
            while(true)
            {
            s=new Socket();
            ss=new ServerSocket(3000);
            s=ss.accept();
            Read r=new Read(s);
            r.start();
            }
            }catch(Exception e){}
        }

    }
    class Read extends Thread{
        DataInputStream inp;
        PrintStream outp;
        String str;
        Read(Socket s)
        {
            try{
            inp=new DataInputStream(s.getInputStream());
            outp=new PrintStream(s.getOutputStream());
            }catch(Exception sd){}
        }
        public void run()
        {
                status.setText(status.getText()+"\nreading");
            try{
            while(true)
            {
                str=inp.readLine();
                chatwin.append(str);
                outp.println(str);
            }
            }catch(Exception er){}
        }

    }

2 个答案:

答案 0 :(得分:4)

在分配ss后移动while逻辑。

try 
{
    ss = new ServerSocket(3000);
    while (ss.isBound())
    {
        s=ss.accept();
        Read r = new Read(s);
        r.start();
    }
}

你的问题是你不能多次这样做:

ss = new ServerSocket(3000);

您已经创建了一个位于端口ServerSocket的{​​{1}},所以当您尝试创建另一个时,它会尝试将自己绑定到该套接字,并且因为您的第一个而未成功3000仍然坐在那里。您应该只创建一个ss并在线程连接到ServerSocket时从那个ServerSocket获取套接字连接。

这会回答你的问题吗?

答案 1 :(得分:0)

ss.accept()将阻塞,直到收到连接。你是如何与它连接的?