2012-02-17 15 views
0

URLConnectionを介してサーバーと通信するプロジェクトに取り組んでいます。ここで長いDNSパケットのため、サーバーへのAndroid通信が非常に遅い

は、コードは次のとおりです。

URL theSite; 
theSite = new URL(TestURL); 
URLConnection con = theSite.openConnection(); 

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 

しかし、これは、サーバーと話をするときに私のモトローラATRIXとサムスンネクサスSは約20秒以上を取っています。 (情報は最終的に縫い目が送られてきます)wiresharkのパケットを見ると、DNSパケットのグループが多数あり、それぞれの間に約3〜5秒の間隔があります。これは通信が遅い可能性があります。

ここに2つのサンプルDNSパケットがあります。

Time   Source Destination Protocol Info 
20.308792 10.10.120.104 8.8.8.8 DNS  Standard query PTR 3.120.10.10.in-addr.arpa 
25.360726 10.10.120.104 8.8.8.8 DNS  Standard query PTR 3.120.10.10.in-addr.arpa 

はとにかく、これは青のうち、今日起こった(私はグーグルであると信じて8.8.8.8の目的地を除いて、IPの変更しました)。しかし、サーバとデバイス間の通信が遅くなっているのは、これらのDNSコールであることは非常に明白です。

ノートの別のことは、私もサムスンギャラクシー10.1タブレットでは、同じコードを試してみて、それは正常に動作しているということです。パケットトレースを見ると、タブレットから追加のDNSコールはありません。

私はサーバーを制御できず、パケットを私に送信しました。誰にも何か提案はありますか?私はそれがサーバー関連の問題であると推測しています。誰かがアイデアを持っている場合、それは非常に感謝しています。

ありがとうございます!

答えて

0

これを理解しました。サーバ側では、DNSパケットのルーティングに問題があり、修正されたタイムアウトが発生していました。

この問題が再び発生しないようにするために追加したものは、手動でDNSタイムアウトを設定して、一度失敗した後にDNSパケットタイムアウトがほぼ瞬時になるようにすることです。 InetSocketAddressを使用することが重要です。

これを実現するためのサンプルコードがあります。

int timeout = 0; //How ever long you want to set the timeout to. 
    somePageParameters = "Parameter String"; 
    InetSocketAddress isock = new InetSocketAddress(ip, 1000); 
    Socket s = null; 
    s = new Socket(); 
    s.connect(isock,timeout); 
    OutputStream os = s.getOutputStream(); 
    String myString = ""; 
    myString = "GET "+"/"+ somePageParameters+" HTTP/1.0\n\r\n\r"; 
    System.err.println("Hitting with: "+myString); 
    byte outbuf[] = myString.getBytes(); 
    os.write(outbuf); 
    os.flush(); 

このソケットは、通常どおり使用してください。

これは誰かを助けてくれることを願っています。

0

4gまたは3gを使用していますか?私は今日、非常に似たような経験をしており、遅れは4gを使用するときにのみ存在することに気づいた。 3gは大丈夫です。

AFAIKでは、4gはデフォルトでipv6アドレスを使用し、3gはデフォルトでipv4を使用します。その遅れは、ipv6が失敗し、フェールオーバーに達し、最終的に再ルーティングされます。私のためには、約20秒かかりました。

現在、私たちのDNSがipv6を適切に処理するように設定されているかどうかを確認するために、サーバーチームからのフィードバックを待っています。

しかし、正直言って、これは私が手に入れた限りです。申し訳ありませんが、それは明確です。

+0

これまでのところ、Wi-Fi経由でのみテストされています。コメントありがとう、私はそれを見ていきます。あなたがそれを理解することができれば、私に知らせてください。 – Dave

+0

ipv6をリダイレクトするサービスのどこかにxmlフラグがあります。これで問題が解決しました。 – edthethird

関連する問題