私はServerSocketを使用してwhileループでクライアントからデータを取得しますが、最初の実行時には動作しますが、2回目以降は失敗します。ServerSocketはループ内にデータを受け取りません
検索しましたが、まだ何が起こったのか把握できません。
サーバー側のコード
package com.gorilla.main;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server2 {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(44444);
while(true){
System.out.println("another round");
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
System.out.println("available: "+ inputStream.available());
byte[] b = new byte[inputStream.available()];
inputStream.read(b);
System.out.println(new String(b));
System.out.println("=======================");
socket.close();
}
}
}
Clent側のコード
package com.gorilla.main;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client2 {
public static void main(String [] args) throws Exception{
Socket socket = new Socket("127.0.0.1", 44444);
String s = "Hello World";
byte [] b = s.getBytes();
socket.getOutputStream().write(b);;
socket.close();
}
}
とサーバー側のコンソールに出力私は、クライアントを3回走った後。
another round
available: 11
Hello World
=======================
another round
available: 0
=======================
another round
available: 0
=======================
another round
いずれかの提案をいただければ幸いです。ありがとう。
なりそれは動作します。しかし、なぜ私はinputStream.available()が0のときにinputStreamから何かを読み取ることができますか?アイデアはありますか? –
お返事ありがとうございます! –
あなたのユースケースは 'available()'を必要としません。 (それはブロッキングコールです)を読み、タイムアウトを設定してください – Raffaele