2013-02-14 128 views
3

我创建了一个非常简单的网络服务器在qt非常具体的需求。 就这么简单,让我们有一个HTTP请求: GET /cover.png HTTP 1.1Qt网络服务器与手机浏览器

响应到达桌面计算机上完美。当我尝试从移动设备获取图像时(我尝试了更多,但可以说android + opera),图像不会加载。在opera中,它只加载大约1/3的图片,而在服务器端qt声称所有字节都发送正常。

我注意到了这一点取决于图像大小:〜4K是好的,但12K是“太多”

我知道在Android歌剧可以加载更大的图像,所以我必须弄乱的东西在响应。但同时,在我的桌面上,所有主流浏览器都很好。

我注意到部分加载的图像显示后,opera会打开一个新的tcp连接tovards我的服务器,但不发送任何东西! 它试图加载图像块? http中有这种东西吗?

我真的迷路关于什么是在这里...

更新: 如果该文件是足够大它不会在桌面环境中工作eighter! 经验限制: 桌面:最大。 65339字节 手机:最大。 12834字节

由于限制是不一样的,我不认为这是Qt相关。

回答

0

我设法弄明白: 图像的下载停止,因为TCP连接太早关闭由我的服务器。这很奇怪,因为我发送这样的回复:

socket->write(message); 
if(!socket->waitForBytesWritten(5000)) 
{ puts("Timed out!"); } 
emit sent(); 

它不能这样工作。 QTcpSocket是一个缓冲的IODevice,因此如果发送超时,它应该打印。也许我误解了waitForBytesWritten()。 因此,事实证明它毕竟是一个Qt问题。如果我在发送后没有删除套接字,则工作正常。 桌面和移动浏览器的大小限制差异大约是他们可以达到的速度(在删除套接字之前可以接收多少个字节)。

那么我怎么能确定所有的字节真的发送到客户端?

0

有一个在管线241错字:

int len = 4096; 

应该是:

int len = 32768; 
+0

这个问题让我很好奇这个问题。你怎么能诊断它我没有看到任何代码? – Rob 2013-02-14 04:23:50

+0

让我大笑:-) – Hossein 2013-02-14 05:18:00

+0

为什么会这样做? – Rob 2013-02-14 05:34:31