我的服务器端和客户端使用的是CSocket派生类,我现在正在本地计算机进行测试,就是本地开一个线程,连接本地的服务器,多数情况是正常的,但是偶尔会出现OnReceive无法接收数据的情况,并且一旦无法接收了,就始终无法接收了,比如服务器发送的数据客户端OnReceive永远无法相应,但是客户端发送的数据服务器OnReceive能收到。由于代码太多无法贴出来,发送的Send我是循环发送的办法。BOOL CNetSocket::SendEx(void * pSendBuf,int nCount)
{
int nBytesSent;
nBytesSent = 0L;
while (nBytesSent < nCount)
{
int dwBytes;
if ((dwBytes = Send((BYTE*)pSendBuf + nBytesSent,nCount - nBytesSent))
== SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
Sleep(100);
continue;
}
else
{
break;
}
}
else
nBytesSent += dwBytes;
}
if (nBytesSent == nCount)
return TRUE;
return FALSE;
}这几天一直搞不定,快疯了。
{
int nBytesSent;
nBytesSent = 0L;
while (nBytesSent < nCount)
{
int dwBytes;
if ((dwBytes = Send((BYTE*)pSendBuf + nBytesSent,nCount - nBytesSent))
== SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
Sleep(100);
continue;
}
else
{
break;
}
}
else
nBytesSent += dwBytes;
}
if (nBytesSent == nCount)
return TRUE;
return FALSE;
}这几天一直搞不定,快疯了。
无语了,
看来我得用SOCKET API了
OnRecive 我都无法相应,里面的代码还有什么分析意义?
问题很奇怪的,我现在由原来的只读取指定长度的数据包就返回OnRecive,改成读完后再读一个1字节确认是否后面有粘包的数据,虽然每次都是返回-1,但是这个怪问题就彻底没有了。
== SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
Sleep(100);
continue这是什么东西?
你当阻塞的socket?