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(); } } }
トラブルシューティング
サーバーがクライアントに応答しない場合は、いくつかの理由が考えられます:
解決策:クライアントとクライアントの両方から送信されるメッセージの終わり
string = "end\r\n"; out.write(string); out.flush();
out.write("to end\r\n"); out.flush();
解決策: ネットワーク接続を確認してください受信接続または送信接続をブロックしている可能性のあるファイアウォールまたはルーターの設定を確認します。
解決策: クライアントとサーバーの両方でポート番号を調整します。必要に応じてコードを入力します。
以上がJava サーバーがクライアントのリクエストに応答できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。