良い一日、
実際に TCP パケットを送信する必要がある Java サーブレットがあります。接続が確立されていれば、データを正常に送信できます..
ただし、タイムアウトが必要な場合は、決してタイムアウトしません。
私のソケット送信コードは次のようになります。
private static String sendMessage(int command,String data,int port,String ip){
try{
String sendString=Integer.toString(command)+":"+data+'$'+'\n';
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
Socket clientSocket = new Socket(ip, port);
clientSocket.setSoTimeout(30000);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outToServer.writeBytes(sendString);
String rcvString = inFromServer.readLine();
System.out.println("FROM DEVICE: " + rcvString);
clientSocket.close();
return rcvString;
}catch(Exception e){
System.err.println(e.getMessage());
}
return NULL;
}
ご覧のとおり、タイムアウトを 30 秒に設定しました。ただし、タイムアウトにはほぼ 80 秒かかります。場合によっては60秒かかります。変化し続けています。タイムアウトを 10 秒に設定しましたが、それでも時間がかかります。まるでその機能がまったく機能していないかのようです。何を与える!? それはスレッドの問題ですか?