ホームページ >Java >&#&チュートリアル >Java サーバーがクライアントのリクエストに応答できないのはなぜですか?

Java サーバーがクライアントのリクエストに応答できないのはなぜですか?

DDD
DDDオリジナル
2024-11-10 05:41:02553ブラウズ

Why Does My Java Server Fail to Respond to Client Requests?

Java ソケット通信でサーバーがクライアントに応答できない

Java では、クライアントとサーバーの間でソケット通信を確立しようとすると、サーバーがクライアントに応答できない状況が発生する可能性があります。これにはいくつかの理由が考えられますが、この記事で詳しく説明します。

クライアントとサーバーのソケット通信

通信を開始するには、通常、サーバーは ServerSocket を作成し、特定のポートで受信接続を待機します。クライアントが接続すると、サーバーは接続を確立するための Socket オブジェクトを作成します。クライアントは、サーバーとの接続を確立するための Socket オブジェクトも作成します。

サーバー コード

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket ss = null;
        Socket s = null;
        try {
            // Create a server socket and listen on port 34000
            ss = new ServerSocket(34000);

            // Accept an incoming connection from a client
            s = ss.accept();

            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(s.getOutputStream());

            // Continuously read messages from the client
            while (true) {
                String string = in.readLine();
                if (string != null) {
                    System.out.println("br: " + string);

                    // Respond to the "end" message from the client
                    if (string.equals("end")) {
                        out.write("to end");
                        out.flush();
                        out.close();
                        System.out.println("end");
                        // break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Close the socket connections
            s.close();
            ss.close();
        }
    }
}

クライアントコード

public class Client {

    public static void main(String[] args) {
        Socket socket = null;
        try {
            // Create a client socket and connect to the server on port 34000
            socket = new Socket("localhost", 34000);
            
            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());

            // Send a message to the server
            String string = "end";
            out.write(string);
            out.flush();

            // Listen for the server's response
            while (true) {
                String string2 = in.readLine();
                if (string2.equals("to end")) {
                    System.out.println("yes sir");
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Close the socket connection
            socket.close();
        }
    }
}

トラブルシューティング

サーバーがクライアントに応答しない場合は、いくつかの理由が考えられます:

  • 改行文字がありません: OutputStreamWriter では、メッセージの末尾に改行文字 (「rn」) を追加する必要があります。これにより、リモート エンドにメッセージの終了が通知されます。提供されているコードでは、「end」メッセージが改行文字なしで送信されているため、サーバーがそれを無視する可能性があります。

解決策:クライアントとクライアントの両方から送信されるメッセージの終わり

string = "end\r\n";
out.write(string);
out.flush();
out.write("to end\r\n");
out.flush();
  • ネットワーク接続の変動: クライアントとサーバーの両方が異なるコンピューターで実行されている場合、それらの間のネットワーク接続が不安定になったり、中断されたりする可能性があります。通信が失敗する原因となります。

解決策: ネットワーク接続を確認してください受信接続または送信接続をブロックしている可能性のあるファイアウォールまたはルーターの設定を確認します。

  • ポート構成が正しくありません: クライアントとサーバーの両方が同じポート番号を使用していることを確認してください。コミュニケーションのために。提供されたコードでは、サーバーはポート 34000 でリッスンしているため、クライアントもそのポートに接続する必要があります。

解決策: クライアントとサーバーの両方でポート番号を調整します。必要に応じてコードを入力します。

以上がJava サーバーがクライアントのリクエストに応答できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。