質問: IISCertificateOKInstance().newCall(request).execute() fun IISCertificateOKInstance():OkHttpClient{ // すべてのSSL証明書を許可したクライアントを返している // ソースは省略 } ``` ``` java.net.SocketTimeoutException: failed to connect to /〇〇 (port ××) from /△△ (port ◇◇) after 10000ms ``` 最初はAPIのURLかサーバーのIPアドレスかポート番号が違っているのかと考えていたのですが、 実行環境をエミュレーターから実機に変更し、実機のwifi通信をoffにしてみると上記エラーは返してきませんでした。 調べてみると△△の部分はandroidに接続されているwifiのIPアドレスであることがわかりました。 ですが、◇◇の部分がwifiのポート番号なのかは確かな確証を得ることができませんでした。 ~~(エラーがなかったからと言ってAPIのresponse情報が返ってきたのかといわれると実際にはアプリがクラッシュしましたが、今回は置いときます)~~ かといって、実際にAndroidでアプリケーションを使う際、いちいちwifiを切ったりするのはいかがなものかと考えます。 では、どうすればAndroidがwifi接続されている状態でもAPIは叩けるのか、 その方法、および上記の解決方法を教えてください
回答: クライアントを作成されているのであれば, サーバのアドレスとポートを指定するものと思います. クライアントのアドレスや使用したポートは通常は関係無いのではないでしょうか. (プロキシ関係では何かあるのかもしれませんが...) アドレスとポート, それにプロトコル等が合っているのであれば, タイムアウトした理由はサーバの管理者に問い合わせるべきかと思います. 追記 == > > Androidがwifi接続されている状態でもAPIは叩けるのか > > > キャリアの回線で通り, wifi で通らないのであれば, 先ず wifi の管理者にお問い合わせください. 何かの事情によって該当サーバに接続出来なくしてあったり, 逆に間違って接続できなくしてしまっていたりといったことがあるかもしれません.