Qt网络服务器与移动浏览器

时间:2013-02-14 00:40:07

标签: android qt http webserver opera

我在qt中创建了一个非常简单的网络服务器,以满足特定需求。 就这么简单,让我们有一个http请求:  GET /cover.png HTTP 1.1

响应完全来自台式计算机。当我试图从移动设备获取图像(我试过更多,但让我们说android + opera)图像将无法加载。在Opera中,它只加载了大约1/3的图片,而在服务器端qt声称所有字节都被发送好了。

我注意到它取决于图像的大小:~4k还可以,但12k是“太多”

我知道android上的opera会加载更大的图像,所以我必须在响应中弄乱一些东西。但与此同时,在我的桌面上,所有主流浏览器都很好。

我注意到在显示部分加载的图像后,opera会打开一个新的tcp连接到我的服务器,但什么也没发送! 它试图以块的形式加载图像吗? http中有这样的东西吗?

我真的迷失在这里的......

更新: 如果文件足够大,它将无法在桌面环境中使用! 经验限制: 桌面:最大65339字节 手机:最大12834字节

由于限制根本不相同,我认为这与Qt无关。

2 个答案:

答案 0 :(得分:0)

第241行有一个拼写错误:

int len = 4096;

应该是:

int len = 32768;

答案 1 :(得分:0)

我设法搞清楚了: 由于我的服务器太早关闭了tcp连接,因此图像下载停止。这很奇怪,因为我发送了这样的回复:

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

这种方式不起作用。 QTcpSocket是一个缓冲的IODevice,因此如果发送超时则应该打印。也许我误解了waitForBytesWritten()的一些事情。 所以事实证明它毕竟是一个Qt问题。如果我在发送后没有删除套接字就可以了。 桌面和移动浏览器的大小限制差异与它们可以实现的速度有关(在删除套接字之前它可以接收多少字节)。

那么如何确定所有字节是否真正发送到客户端?