文件下载 - WinSock

时间:2015-06-03 22:36:52

标签: c winapi winsock

通过C中的WinSock从我的服务器下载exe文件后,我收到此错误:

image

这是我用来将读取的字节写入文件的代码:

while (recv(mySock, buf, FILEBUFFER, 0) > 0)
{
     WriteFile(hFile, buf, sizeof(buf), &bytes, NULL);
}

以下是使用的变量定义:

#define FILEBUFFER 2048

CHAR buf[2048]

任何人都知道如何解决这个问题,或问题是什么?

2 个答案:

答案 0 :(得分:3)

你假设recv每次都返回完整的缓冲区,但是不能保证(仅仅测试> 0时)它返回超过1个字节。您需要使用recv的结果作为要写入文件的数据量。

答案 1 :(得分:0)

首先,如果您使用普通winsock下载文件,则需要构建正确的http请求并正确处理响应。当您从服务器获得响应时,请确保处理响应而不是盲目地使用该文件写入响应。

其次,您应该检查recv的返回值,以查看它收到的字节数,然后写入该数量。

第三,如果您只想下载文件而不手动处理请求和响应,则可以使用URLDownloadToFile API或使用WinInet API。