我的程序里有时会有多个线程同时向服务器A发送数据,有时候会出现在向服务器A发送数据的同时,服务器A也在向我发送数据。这种时候我就会收不到服务器的数据,而且从此以后再也收不到服务器A发来的数据了,但可以向服务器A发送数据又是正常的
想问下有没有人也遇到这种情况,这种情况是不是正常会出现的,还是我的程序写得有问题呢?
请高手解答
想问下有没有人也遇到这种情况,这种情况是不是正常会出现的,还是我的程序写得有问题呢?
请高手解答
解决方案 »
- int型数据转换成时间
- MFC edit control的auto VScroll 和 Horizontal scroll无法更改
- 急!!!注册com文件中文路径出错,VC6该如何配置不使用ATL.DLL
- VC中如何把文件加入到External Dependencies
- 界面上一Picture控件,里面的图片是动态加载的,怎么界面一最小化后再回复,图片就没了
- 听听大家的意见
- listcheckbox 如何实现“全不选”“全选”
- 初学者问题!
- 请教一个问题!!在2000下用什么命令可以启动命令提示符窗口(dos窗口)并在此窗口下执行一个文件!!
- 我想自己画窗体的非客户区,应该捕获哪些Windows消息?
- windows mediea encoder 开发,取设备属性配置出错。
- 如何让CEdit(MultiLine)的Scroll Bar可以随意拖动到任意位置,并不随着CEdit中内容的增加而移动?? 在线等。。。
所有的接收数据都丢进了recv buffer.
发送的数据都丢进send buffer.
这两个网络缓存是互不影响的。你说收不到server发来的数据,那server send();成功了吗?
client recv();的返回值是多少?我怀疑跟你的接受处理有关系。
client recv()的返回值我没有单步跟踪过,不晓得是多少,但肯定不是0和SOCKET_ERROR,因为如果是这2个值我的程序是会有显示的
while (TRUE)
{
//收到退出事件,结束线程
if (WaitForSingleObject(pSocket->m_exitThreadEvent,0) == WAIT_OBJECT_0)
{
break;
}
//置空fdRead事件为空
FD_ZERO(&fdRead);
//给客户端socket设置读事件
FD_SET(pSocket->m_socket,&fdRead);
//调用select函数,判断是否有读事件发生
ret = select(0,&fdRead,NULL,NULL,&aTime);
if (ret == SOCKET_ERROR)
{
//触发错误事件
pSocket->OnError(pSocket->m_pOwnerWnd,1);
//触发连接断开事件
pSocket->OnDisConnect(pSocket->m_pOwnerWnd);
pSocket->Close();
break;
}
if (ret > 0)
{
if (FD_ISSET(pSocket->m_socket,&fdRead))
{
//发生读事件
char recvBuf[1024];
int recvLen;
ZeroMemory(recvBuf,1024);
//接收数据
recvLen = recv(pSocket->m_socket,recvBuf, 1023,0);
if (recvLen == SOCKET_ERROR)
{
int iError = WSAGetLastError();
//触发socket错误事件
pSocket->OnError(pSocket->m_pOwnerWnd,iError);
//触发与服务器断开事件
pSocket->OnDisConnect(pSocket->m_pOwnerWnd);
pSocket->Close();
break;
}
else if (recvLen == 0)
{
int iError = WSAGetLastError();
//触发socket错误事件
pSocket->OnError(pSocket->m_pOwnerWnd,iError);
//触发与服务器端断开事件
pSocket->OnDisConnect(pSocket->m_pOwnerWnd);
}
else
{
//触发数据接收事件
pSocket->OnRead(pSocket->m_pOwnerWnd,recvBuf,recvLen);
}
}
}