我用客户端使用wininet的建立http连接代码如下:
hOpen = InternetOpen (TEXT("MyHttpTest"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
hConnect = InternetConnect (hOpen, lpszServer, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, NTERNET_SERVICE_HTTP, 0, NULL);
hRequest = HttpOpenRequest (hConnect, TEXT("POST"), lpszUri, "HTTP/1.1", NULL, (LPCTSTR*)AcceptTypes, dwFlags, 0);
result = HttpSendRequest (hRequest, NULL, 0, szDataBuf, dwDataBufLength);给服务器发一个POST请求,并发送数据,数据放在缓存szDataBuf中,数据量大约几兆。在服务器端建立一个socket,并用WSARecv接收数据时发现,数据有丢失现象,而且每一次发送接收的数据都会不一样大,这是怎么回事,如果传几k的数据能够确实接收到,为什么传大量的数据出现问题呢??在客户端我使用了HttpSendRequestEx,InternetWriteFile和HttpEndRequest的方式也出现同样的问题?不知如何解决??
hOpen = InternetOpen (TEXT("MyHttpTest"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
hConnect = InternetConnect (hOpen, lpszServer, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, NTERNET_SERVICE_HTTP, 0, NULL);
hRequest = HttpOpenRequest (hConnect, TEXT("POST"), lpszUri, "HTTP/1.1", NULL, (LPCTSTR*)AcceptTypes, dwFlags, 0);
result = HttpSendRequest (hRequest, NULL, 0, szDataBuf, dwDataBufLength);给服务器发一个POST请求,并发送数据,数据放在缓存szDataBuf中,数据量大约几兆。在服务器端建立一个socket,并用WSARecv接收数据时发现,数据有丢失现象,而且每一次发送接收的数据都会不一样大,这是怎么回事,如果传几k的数据能够确实接收到,为什么传大量的数据出现问题呢??在客户端我使用了HttpSendRequestEx,InternetWriteFile和HttpEndRequest的方式也出现同样的问题?不知如何解决??
接收端我使用了循环接收,如下:
while(true)
{
result = recv(client, sztmpBuf, sizeof(sztmpBuf), 0);
if ( (dwLength-= result) == 0)
{
break;
}
}
dwLength为接收数据的长度,通过这样的方式可以完整的接收了。如果事先未知文件的长度,该如何接收呢。另外,能否用WSARecv()接收大量数据呢?
{
result = recv(client, sztmpBuf, sizeof(sztmpBuf), 0);
if ( (dwLength-= result) == 0)
{
break;
}
}
这一段应该是这样吧
while(true)
{
result = recv(client, sztmpBuf, dwLength, 0);
if ( (dwLength-= result) == 0)
{
break;
}
}
to cathysun118
能否用WSARecv接收?