int nSize=0;
//不断地接收S方的数据
m_strData = (char *)HeapAlloc(GetProcessHeap(), AP_ZERO_MEMORY, m_dataSize);
unsigned long recvData=0;
while(nSize!=m_dataSize)
{
if (nSize>m_dataSize)
return false;
if (0!=ioctlsocket(m_threadobj->SocketList->next->next->s,FIONREAD, &recvData))
return false;
if (recvData!=0)
{
int ret=recv(m_threadobj->SocketList->next->next->s,m_strData + nSize,SEND_MAX_SIZE,0);
if ((ret == 0)||(ret==SOCKET_ERROR))
return false;
else
{
nSize =nSize + ret;
}
}
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(1);
}
程序中源代码如上,用来接收数据,m_dataSize是需要接收的长度,经确认,服务器发回来的数据长度却是为m_dataSize,而我用nSize来累加接收到的数据,可后来却发现,数据小时没问题,数据量大时会出现nSize大于m_dataSize的情况,请问有人知道是为什么吗?
//不断地接收S方的数据
m_strData = (char *)HeapAlloc(GetProcessHeap(), AP_ZERO_MEMORY, m_dataSize);
unsigned long recvData=0;
while(nSize!=m_dataSize)
{
if (nSize>m_dataSize)
return false;
if (0!=ioctlsocket(m_threadobj->SocketList->next->next->s,FIONREAD, &recvData))
return false;
if (recvData!=0)
{
int ret=recv(m_threadobj->SocketList->next->next->s,m_strData + nSize,SEND_MAX_SIZE,0);
if ((ret == 0)||(ret==SOCKET_ERROR))
return false;
else
{
nSize =nSize + ret;
}
}
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(1);
}
程序中源代码如上,用来接收数据,m_dataSize是需要接收的长度,经确认,服务器发回来的数据长度却是为m_dataSize,而我用nSize来累加接收到的数据,可后来却发现,数据小时没问题,数据量大时会出现nSize大于m_dataSize的情况,请问有人知道是为什么吗?
解决方案 »
- 用MFC编写指纹和身份证信息采集相关联
- 动态创建的控件如何响应鼠标事件,如何通过子窗口中的控件向父窗口发送消息
- 别人的程序,其中几行不明白。请问下面2组赋值方法有什么区别?(一个有&,一个没有&)是笔误还是有其它用意?
- 一个网络截包的问题
- 谁了解用ATL写一个webbrowser控件的浏览器,只要打开百度就可以了
- 关于ATL的调试:ATLTRACE ----->
- 俺是VC业余级爱好者,在这经常能看到vxd这东西,请问这东西是干嘛用的?在2000下能干啥???给个最简单最简单的例子okay?谢谢!
- 快说说!
- =====怎样把DWORD转成CString?======
- 新手提问:这些报错信息是怎么搞?
- 关于C++编译器的两个问题
- 请教高手,关于鼠标响应!
//不断地接收S方的数据
m_strData = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m_dataSize);
unsigned long recvData=0;
while(nSize!=m_dataSize)
{
if (nSize>m_dataSize)
return false;
if (0!=ioctlsocket(m_threadobj->SocketList->next->next->s,FIONREAD, &recvData))
return false;
if (recvData!=0)
{
int ret=recv(m_threadobj->SocketList->next->next->s,m_strData + nSize,SEND_MAX_SIZE,0);
if ((ret == 0)||(ret==SOCKET_ERROR))
return false;
else
{
nSize =nSize + ret;
}
}
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(1);
}上面的排的不整齐,重新排一下