質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

2264閲覧

okhttp Wifiを挟んでのhttp送信

s_nakagawa

総合スコア7

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/04/01 04:04

編集2020/04/01 09:21

お世話になっております。
現在、私はWeb APIにてJsonStringを取得するクラスを作成しています。
ですが、response変数を生成する前に以下のエラーを吐きます。

kotlin

1// この時点でNETの権限は確認済み 2 3val URL = "http://〇〇:××/api" 4 5val request = Request.Builder() 6 .url(URL) 7 .build() 8 9val response = IISCertificateOKInstance().newCall(request).execute() 10 11fun IISCertificateOKInstance():OkHttpClient{ 12 // すべてのSSL証明書を許可したクライアントを返している 13 // ソースは省略 14}

error

1java.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は叩けるのか、
その方法、および上記の解決方法を教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/04/01 04:24

それはどの API でしょうか? 普通は動的なポート番号は使わないと思いますけど…。あと、Proxy は必要なのでしょうか?
s_nakagawa

2020/04/01 04:49

申し訳ありませんが、どのAPIという質問の意図があまり把握できておりません。 URLという変数がAPIのURIで、このAPIは自作のものととらえると助かります。 Proxyを利用しない場合でも、上記エラーが発生します。 そのため、Proxyをかませて上記APIを発生させようという魂胆です。 おそらくですが、API本体を書いていないためわかりにくかったものと思います。 質問ありがとうございました
guest

回答1

0

ベストアンサー

クライアントを作成されているのであれば, サーバのアドレスとポートを指定するものと思います.
クライアントのアドレスや使用したポートは通常は関係無いのではないでしょうか.
(プロキシ関係では何かあるのかもしれませんが...)
アドレスとポート, それにプロトコル等が合っているのであれば, タイムアウトした理由はサーバの管理者に問い合わせるべきかと思います.

#追記

Androidがwifi接続されている状態でもAPIは叩けるのか

キャリアの回線で通り, wifi で通らないのであれば, 先ず wifi の管理者にお問い合わせください.
何かの事情によって該当サーバに接続出来なくしてあったり, 逆に間違って接続できなくしてしまっていたりといったことがあるかもしれません.

投稿2020/04/01 07:33

編集2020/04/02 18:33
jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_nakagawa

2020/04/01 08:56 編集

ご回答ありがとうございます。 結論から申し上げますと、私が情弱だった為に発生した勘違いだったようです。 ご回答いただいた通り、クライアントのプロキシはサーバ側のアドレスとポートを指定する箇所でした。 では、何故上記エラーが発生したのか。 恐らくですが、Androidとサーバーとの間にWifiをかませていたせいだと思われます。 プロキシを抜いた状態で実機で実行し、wifi機能をoffにした状態でapiを叩くと、 実行が通ったような挙動をいたしました。(実際には処理が重すぎてアプリが落ちましたが...) とにかく、これを機に質問内容を変更致します。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問