当一个客户与服务器建立TCP连接之后,如何才能响应服务器发来的数据,然后做相应的处理,也就是这个recv()该写在哪里?客户不知道什么时候数据来,并且客户也随机的发数据过去。比如QQ. 我怎么不用 MFC也能实现呢?(避免消息)
解决方案 »
- 驱动安装程序的问题!急!!!
- 各位大神救命呀,mfc连接sql server 2008 r2死活连不上?
- 正在做bittorrent文件解析器,遇到一个问题
- 请问timeSetEvent函数的定义---急,在线!!
- 哪位达人 帮个忙?
- CSDN怎么上传自己作的软件?别的地方有什么好的主页或上传或宣传自己的软件的地方吗?
- HEAP[test.exe]: Invalid allocation size - 90909048 (exceeded 7ffdefff)
- newbie求助:在某些网页上看到ActiveX控件,听人说是用com开发的(内详),希望各位前辈不吝赐教,给小弟讲解一点基础知识,感激不尽!!!还是那句话:分不是问题,可以加到200分!先看看有无会应!
- 各位大哥,哪儿有机械工业出版社出版的VISUAL C++5.0开发技术内幕下载呀?
- 一个中专生的困惑!!!
- 有何简单方法使html中的相对路径变成绝对路径?
- [::]如何用c++实现获取一个网站的信息(html代码),而不用IE?我有一段java代码,不知哪位能帮助转为vc
你不用CSocket可以用winsock 2.0 api来做。
{
ASSERT(arglist);
CClientOverlappedSock *Socket=(CClientOverlappedSock *)arglist;
WSANETWORKEVENTS NetworkEvents;
HANDLE hEvent[2];
hEvent[0] = Socket->m_hEventClient;
hEvent[1] = Socket->m_hEventExit;
while(1)
{
DWORD ret = WSAWaitForMultipleEvents(2,hEvent,FALSE ,WSA_INFINITE,FALSE);
switch(ret)
{
case 0:
{
::WSAEnumNetworkEvents (Socket->m_RecSocket,NULL,&NetworkEvents);
WSAResetEvent(Socket->m_hEventClient );
switch(NetworkEvents.lNetworkEvents)
{
case FD_CLOSE:
Socket->RemoteClose();
break;
case FD_READ:
Socket->OnRead();
break;
default:
break;
}
}
break;
case 1:
return 0;
break;
default:
break;
}
}
return 0;
}
有数据到达的时候再进行接收数据。
fd_set readfds;
struct timeval timeval={300,0}; //300秒超时
while(1)
{
FD_ZERO( &readfds)
FD_SET(pDlg->m_serSock,&readfds);
ret = select(0,&readfds,NULL,NULL,&timeval); //300秒
if(ret==SOCKET_ERROR)
{
TRACE("socket select 错误=%d!\n",WSAGetLastError());
}
break;
}
//等待超时,退出线程等待
if(ret==0)
{
break;
}
if(ret>0) //有数据到达
{
n=recv(pDlg->m_serSock[sockid],buf,1023,0);
}
}