4

アプリが http リクエストをサーバーに送信する際に問題が発生しています。サービスを介して毎分自動的に更新をサーバーに送信しますが、しばらくアイドル状態になった後、サーバーへのすべての接続が失われ、後続のすべての要求がタイムアウトすることがあります。アプリには、オンデマンドで単一の要求を送信する ping 機能があり、それもタイムアウトします。

現在、アプリを実行している 4 つのデバイスがあり、そのうち 1 つだけがこの問題を示しています。私が言ったように、それはたまにしか起こりません。問題なくデバイスを数時間実行したままにしておくことができます。

また、デバイスで他のアプリを実行してみましたが、問題なく接続されています。

問題を引き起こしているデバイスは、Android 4.1.2 を実行している Motorolla TC55 です。

 public static JSONObject sendRequest( String unsignedURL, JSONObject request,
  String transactionUUID ) throws Exception {

request.put( "url", unsignedURL );
request.put( "accessKeyId", ACCESS_KEY );
request.put( "signatureMethod", "HmacSHA256" );
request.put( "protocol", "1.0" );
request.put( "timestamp",
    ConnectProtocol.getIso8601DateTimeFormat( ).format( new Date( ) ) );
request.put( "transactionUUID", transactionUUID );
String reqData = request.toString( );

byte[] reqDataBytes = reqData.getBytes( "UTF-8" );
String asciiReqData = new String( reqDataBytes, "ASCII" );
String signature = ConnectProtocol.calculateRFC2104HMAC( "HmacSHA256",
    asciiReqData, ACCESS_KEY );
String signedURL = unsignedURL + "?signature="
    + URLEncoder.encode( signature, "UTF-8" );
URL url = new URL( signedURL );

HttpURLConnection connection = (HttpURLConnection) url.openConnection( );

connection.setRequestMethod( "POST" );
connection.setRequestProperty( "Content-Type", "application/json" );
connection.setRequestProperty( "Content-Length",
    Integer.toString( reqDataBytes.length ) );

connection.setUseCaches( false );
connection.setDoInput( true );
connection.setDoOutput( true );

connection.setConnectTimeout( CONNECTION_TIMEOUT_MS );

DataOutputStream wr = new DataOutputStream( connection.getOutputStream( ) );
wr.write( reqDataBytes );
wr.flush( );
wr.close( );

if ( connection.getResponseCode( ) != 200 ) {
  return null;
}

InputStream is = connection.getInputStream( );
BufferedReader rd = new BufferedReader( new InputStreamReader( is ) );

String line;
StringBuffer responseBuf = new StringBuffer( );
while ( (line = rd.readLine( )) != null ) {
  responseBuf.append( line );
  responseBuf.append( '\r' );
}
rd.close( );
connection.disconnect( );

return new JSONObject( responseBuf.toString( ) );

}

また、サーバーはすべてのリクエストをログに記録し、そのデバイスからは何も表示されませんが、接続されている他のデバイスからのメッセージは表示されます。

回答を検索しましたが、特に私の問題に関連するものは見つかりません。

どんな助けでも大歓迎です!

4

0 に答える 0