关于网友提出的“ 客户端与服务器经常出现无法通信的怪现象”问题疑问,本网通过在网上对“ 客户端与服务器经常出现无法通信的怪现象”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 客户端与服务器经常出现无法通信的怪现象
描述: 我的服务器端和客户端使用的是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;
}
这几天一直搞不定,快疯了。
解决方案1: 用什么协议的tcp?udp?是不是包丢了啊?
解决方案2: 看来问题可能在 ReceiveEx中.
解决方案3:
是从一开始就无法接收?
还是起初可以,过段时间后无法接收?
解决方案4: 把每一步的GetLastError()打印出来。日志也打印出来。
解决方案5: 你写的代码,出现这个问题,很正常。
if ((dwBytes = Send((BYTE*)pSendBuf + nBytesSent,nCount - nBytesSent))
== SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
Sleep(100);
continue
这是什么东西?
你当阻塞的socket?
解决方案6: 这个不是解决了吗?
http://topic.csdn.net/u/20080701/10/d8fef584-8e3b-40f1-926f-e9497727105d.html
解决方案7: 有多线程?
没同步?
解决方案8: 那就是多线程死锁了
解决方案9: OnReceive中怎么写的?
解决方案10: up
以上介绍了“ 客户端与服务器经常出现无法通信的怪现象”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3116134.html