我的程序里有时会有多个线程同时向服务器A发送数据,有时候会出现在向服务器A发送数据的同时,服务器A也在向我发送数据。这种时候我就会收不到服务器的数据,而且从此以后再也收不到服务器A发来的数据了,但可以向服务器A发送数据又是正常的
想问下有没有人也遇到这种情况,这种情况是不是正常会出现的,还是我的程序写得有问题呢?
请高手解答
想问下有没有人也遇到这种情况,这种情况是不是正常会出现的,还是我的程序写得有问题呢?
请高手解答
解决方案 »
- VC中DDE开发
- GetSubItemRect(-1,0 LVIR_BOUNDS, crect);参数已经为-1居然rect有正常的值
- 在MFC基于对话框编程中,一旦定义一个CPtrArray成员变量后在执行int nResponse = dlg.DoModal()时就出错了
- _locale_t是什么类型?
- vs2003下载,求1!
- 小问题急问:system和Exec如何用?
- 类型转换,在线等待
- 使用ATL编写COM组件,然后编写了一个MFC的测试程序,测试程序调用COM可以正确运行,但是在ATL COM调试运行MFC测试程序时出错。出错
- 一个实用的重定向问题1
- 我想把一幅图片放在开始菜单的按钮 开始左边
- 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);
}
}
}