WSAAsyncSelect中,怎么样保证接收数据完整?
代码是这样:case FD_READ:
char szText[102400] = { 0 };
memset(szText,0,102400);
::recv(s, szText, 10240, 0);
我发的包有10000字左右,
但只能收到部分,我怎么做才能保证完整性呢
代码是这样:case FD_READ:
char szText[102400] = { 0 };
memset(szText,0,102400);
::recv(s, szText, 10240, 0);
我发的包有10000字左右,
但只能收到部分,我怎么做才能保证完整性呢
解决方案 »
- 一口入,一口出的路由器,连个交换机,交换机180台电脑,同一时刻数据怎么出去?
- std::vector 的INSERT问题
- 请教GetWindowText()与GetDlgItemText()的区别?
- 还是这里人气比较旺,问题一个有关C#的问题.
- 关于指针的引用的问题,那位能帮帮忙?
- CHtmlView的问题
- 我想在内存中创建一个dc,然后在里面画东西,请问怎么样做?
- 查看当前与本机相连的机器IP和端口的源码(或具体步骤),类似NETSTAT
- exe dll中数据共享vector
- 誰知道 rva 是甚麼,我在
- IP转发或者说是IP代理
- 100分难题:为何我的socket 在本机上 send 到 recieve 的时候有 4 到 20 ms 的延时?
那么接受自然一次就搞不定了,反复接受几次,如果是TCP的肯定能收齐。经验如此,如有不对,欢迎指正!
详见MSDN
If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
int rec = 0;
int total = 10240;
while(total!= 0)
{
rec = recv(s,szText+left,total,0 );
left += rec;
total -=rec;
}