0

这是我程序的服务器端代码,问题是它接受一个客户端。当另一个客户端连接时,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){}
        }

    }
4

2 回答 2

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位于 port 3000,因此当您尝试创建另一个时,它会尝试将自己绑定到该套接字,并且不会成功,因为您的第一个ss仍然坐在那里。您应该只创建一个并在线程连接到它ServerSocket时从该连接中获取套接字连接。ServerSocket

这能回答你的问题吗?

于 2012-06-13T18:20:14.737 回答
0

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

于 2012-06-13T18:20:49.080 回答