お知らせ
2023.12.5(Tue)
目次
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);
できればコネクションで接続する場合にも、引数でタイムアウトを指定できるようにして欲しかったところですが、現時点では用意されていないので、段階を踏んで対応しましょう。