通过C中的WinSock从我的服务器下载exe文件后,我收到此错误:
这是我用来将读取的字节写入文件的代码:
while (recv(mySock, buf, FILEBUFFER, 0) > 0)
{
WriteFile(hFile, buf, sizeof(buf), &bytes, NULL);
}
以下是使用的变量定义:
#define FILEBUFFER 2048
CHAR buf[2048]
任何人都知道如何解决这个问题,或问题是什么?
答案 0 :(得分:3)
你假设recv
每次都返回完整的缓冲区,但是不能保证(仅仅测试> 0
时)它返回超过1个字节。您需要使用recv
的结果作为要写入文件的数据量。
答案 1 :(得分:0)
首先,如果您使用普通winsock下载文件,则需要构建正确的http请求并正确处理响应。当您从服务器获得响应时,请确保处理响应而不是盲目地使用该文件写入响应。
其次,您应该检查recv
的返回值,以查看它收到的字节数,然后写入该数量。
第三,如果您只想下载文件而不手动处理请求和响应,则可以使用URLDownloadToFile
API或使用WinInet API。