【エラー解決方法】socket(クライアント側)のタイムアウトを設定する方法

 
Javaでsocket通信をしようとして、サーバーとの接続ができない場合がありました。
その際にタイムアウトを指定しないと、デフォルトのタイムアウトが適用されてしまい、予想以上に処理が止まってしまう場合がありました。
 
 

エラー内容

socket通信でサーバーと接続した際に、コネクションができず数十秒処理が停止してしまう現状が発生していた。

java.net.SocketTimeoutException: connect timed out

 

エラー発生時の環境

エラー発生時の開発環境は以下のとおりです。

言語 Java1.7.0_51

 

原因

socketのコネクトを、コンストラクタで行っていた為、タイムアウトが指定できなかった。

//エラー発生時のコード
Socket socket = new Socket(this.ipAddress,  this.echoPort);

 

解決方法

Socketクラスの引数なしコンストラクタを使用して、接続されていないソケットを作成する。
その後、connectメソッドを使用してタイムアウトを設定し、接続を行う。

//接続先のIPアドレスとポートを指定してSocketAddressオブジェクトを生成
InetSocketAddress endpoint= new InetSocketAddress(ipAddress,  echoPort);

//接続されていないソケットを作成
socket = new Socket();

//指定されたタイムアウト値を使って、サーバーに接続
socket.connect(endpoint,  1000);

 

まとめ

できればコネクションで接続する場合にも、引数でタイムアウトを指定できるようにして欲しかったところですが、現時点では用意されていないので、段階を踏んで対応しましょう。

記事をシェア
MOST VIEWED ARTICLES