我有一个例程使用 HttpURLConnection 通过 multipart/form-data 内容类型上传文件。服务器对上传的文件进行一些处理并返回一个简短的响应代码。到目前为止,这在所有情况下都可以正常工作,除非一位用户在 4G 上使用 HTC Evo。如果用户切换到 3G,那么一切正常。当在 4G 上时,应用程序将等待while ((line = reader.readLine()) != null) {
直到抛出套接字连接超时异常。我将连接超时设置为 70 秒。服务器在 php 这里是相关的片段
//all ob_ related entries were added because I found some info indicating
//that some clients would not acknowledge the response without the content-length header
ob_end_clean();
header("Connection: close");
ob_start();
...
//the response is one of either
echo "BACKGROUND"; //this one works!
//or
echo $rv //$rv = "1336757671374T37171FR"
//or
echo "FailedQA";
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
ob_flush();
flush();
die();
?>
请注意,“BACKGROUND”响应有效,其余响应会导致客户端等待超时异常。我目前对此有 2 个想法,但我不在 4G 领域,所以我只能通过最终用户进行测试,我真的想限制尝试次数。我的第一个想法是“BACKGROUND”比“FailedQA”稍长,而另一个更长,它有一个数字开头。所以也许在响应中添加空格会有所帮助?另一个方面是响应时间。'BACKGROUND' 消息通常比其他消息发送得更快。但是,我这里有一个反例,所以我不是陛下。示例:“BACKGROUND”消息通常会在 15 到 20 秒内消失。其他消息通常为 30-40 秒。但是,我有一个例子,其中 '
总结一下:这只发生在 Sprint 4G 上。我怀疑可能是导致问题的内容长度或响应时间,但在这两种情况下,我都有一个相反的反例。除了长度情况之外,较长的反例示例以数字开头,所以就是这样。