

JavaのSocket通信について質問です。  
以下のソースがあったとして、  
このソースでは`res.write(request);`でリクエストを送信後、  
`res.flush();`でフラッシュしています。  
この後、レスポンスを受信する処理が続きます。  
リクエストを送信して何も応答がなかった場合、どうなるのでしょうか？  
処理が止まってしまうのでしょうか？  
またはExceptionが発生してしまうのでしょうか？

[code]

    OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream());
    res = new PrintWriter(writer);
    requ = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
    // リクエスト送信
    res.write(request);
    res.flush();
    
    // レスポンス受信
    SocketResponse response = req.parseResponse(requ);
    
[/code]


CC BY-SA 3.0
2017-01-27T07:27:13.350
32194
2018-12-04T03:02:59.730
2017-01-27T12:19:08.610
19110
20418
question
java socket
JavaのSocket通信について


SocketTimeoutExceptionが発生するのでは？  
<https://docs.oracle.com/javase/jp/8/docs/api/java/net/SocketTimeoutException.html>


CC BY-SA 3.0
2017-03-01T07:56:29.383
33010
2017-03-01T07:56:29.383
20758
32194
answer


応答がなかった時にプログラムが止まってしまわないように、socketにsetSoTimeoutメソッドを使ってタイムアウト時間を設定します。

[code]

    socket.setSoTimeout(2000);
    
[/code]

というような感じで。（タイムアウト時間はミリ秒単位で指定しますので、上の例では2秒以内に受信できなかったらSocketTimeoutExceptionが発生します）

Socketのタイムアウトのデフォールトは0(無限)になっているので、タイムアウト時間の設定を習慣にしたほうが"プログラムが止まってるみたいだけど、、、"というトラブルを減らせます。


CC BY-SA 4.0
2018-12-04T03:02:59.730
50888
2018-12-04T03:02:59.730
217
32194
answer