0

これが私のプログラムのサーバー側コードです。問題は、1つのクライアントを受け入れることです。別のクライアントが接続されている場合、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ポートにあるaをすでに作成している3000ので、別のソケットを作成しようとすると、そのソケットにバインドしようとしますが、最初のソケットssがまだそこにあるため成功しません。スレッドが接続するときに、1つだけ作成ServerSocketし、その1つからソケット接続を取得する必要があります。ServerSocket

これはあなたの質問に答えますか?

于 2012-06-13T18:20:14.737 に答える
0

ss.accept()は、接続を受信するまでブロックします。どのように接続していますか?

于 2012-06-13T18:20:49.080 に答える