4

我的应用程序向我的服务器发送 http 请求时遇到问题。它每分钟通过服务自动向服务器发送更新,但在空闲一段时间后,它偶尔会失去与服务器的所有连接并且所有后续请求都会超时。我在应用程序中有一个 ping 功能,可以按需发送单个请求,并且也会超时。

我现在有 4 台设备运行该应用程序,其中只有 1 台显示此问题。就像我说的,它只是偶尔发生。我有时可以让设备运行几个小时而没有问题。

此外,我尝试在设备上运行其他应用程序,它们连接得很好。

导致问题的设备是摩托罗拉 TC55,运行 Android 4.1.2

 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