0

良い一日、

実際に 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 秒に設定しましたが、それでも時間がかかります。まるでその機能がまったく機能していないかのようです。何を与える!? それはスレッドの問題ですか?

4

1 に答える 1

0

接続後にタイムアウトを設定しています。

これを試して:

 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);

         Socket clientSocket = new Socket();
         InetAddress addr = InetAddress.getByName(ip);
         SocketAddress sockaddr = new InetSocketAddress(addr, port);
         clientSocket.connect(sockaddr, 20000); // 20 seconds time out

         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;
 }
于 2013-07-04T12:15:30.550 に答える