0

わかりました、単純なチャット サーバーとクライアントを作成しようとしています。このプログラムはチャット サーバーです。実行中のスレッドが 2 つあります。最初のスレッドはすべてのクライアントを処理し、ServerSocket を使用して各新しいクライアントを新しいソケットにバインドし、2 番目のスレッドはユーザーが接続されたクライアントにメッセージを送信できるようにします。ただし、このスレッド内からユーザー入力を取得することはできません! ステートメント「String inputvar = br.readLine()」は実行されません! 私は何を間違っていますか?

public void relay() throws IOException
        {
            new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                        try{
                            try
                            {
                            while (true)
                            {

                                Socket socket2 = null;       
                                Socket socket1 = socketmethod(socket2,0); 
                                System.out.println(socket1);
                                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                                while (socket1 != null)
                                { 
                                        PrintWriter outputriver = new PrintWriter(socket.getOutputStream(),true);
                                        boolean cfd = true;
                                        while(cfd==true)
                                        {

                                            System.out.println("this worked");
                                            System.out.print("Message: ");
                                            String inputvar = br.readLine();
                                            System.out.println("this worked2");
                                            if (inputvar.equals("disconnect_now"))
                                            {
                                                cfd = false;
                                            }
                                            outputriver.println("Unknown User: " + inputvar);

                                        }
                                }   
                            }
                            }
                            finally
                            {
                              System.out.println("error 1");
                            }
                        }
                        catch (IOException e)
                        {

                            System.out.println("Unexpected error: IOException in thread2");
                        }
                }
            }).start(); 
4

1 に答える 1

0

あなたのコードからは、クライアント接続の受け入れをどこで開始しているのかわかりません。私はこのようなものを見たいと思っていました...

public void replay() {
    try {
        serverSocket = new ServerSocket(port);

        while(true) {
            try {
                final Socket connection = serverSocket.accept();

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                            String value = br.readLine();

                            PrintWriter pw = new PrintWriter(connection.getOutputStream(), true);
                            pw.println(value);

ただし、多くのスレッドを持つ複数のクライアント リクエストを受け入れる場合は、それらが競合するため、それらが br.readline() でブロックされます。System.in

readline()また、要件を満たすために、入力が正しい「改行」文字を送信していることを確認してください。

于 2014-09-21T19:25:33.763 に答える