请会c++和java朋友帮忙,2G以后,recv总是读出多余的数据,超级奇异?该怎么处理

请会c++和java朋友帮忙,2G以后,recv总是读出多余的数据,超级奇异?
我用winsock写一个程序下载web的资源,服务器是tomcat 4.1
如果web的资源是一个实实在在的文件,那就下载数据长度正常
如果web的资源是一个servlet输出的文件,当超过2G之后,recv总是读出多余的数据,如果说我的servlet输出数据有问题,但我用浏览器下载又是正常的,那说明我的c++程序有问题,但他又能下载一个实实在在的文件,真是很矛盾

例如:一个2G的资源
C/C++ code

DWORD length;
r = ::recv(s, buffer, 51200, 0);
length += r;

length的长度都会是2G再多几K的


------解决方案--------------------
web 服务器返回的数据可能有其他格式: chunked 特别是大文件

Transfer-Encoding: chunked

这时每段数据会多包涵一些 数字, 这样接收的会多出一些数据

------解决方案--------------------
抓包分析下是多了什么数据了