如题,有A和B两个相互通信的程序....A可能向B发送不定的几个数据包...在B程序中怎么判断是否还有数据包要接收?如果A只向B发了一个数据包...哪么B收到后就可以立即处理,但要是A向B发送了2个数据包,当B收到一个数据包后怎么判断是否还有没有接收的数据包?要是再用recv接收,如果又只有1个数据包,程序将无限等待(阻塞模式).发送和接收的数据没有任何特征!无法从数据上判断!!求高手为偶解答,偶不胜感激!!!
解决方案 »
- 一个关于CFileDialog::GetFileName() 以及CStdioFile构造函数的很神奇的问题,求大牛讲解
- 基于VC的教学信息管理系统
- 请问一个执行顺序的问题
- 渐变色的实现
- VC中关于int转换到char类型的一个茫然的地方,
- 询问VC的调试技术!
- 如何用IVTxtAuto播放中文,另外如何用女生来读出来,现在我用的是男生?
- 怎样获取操作系统的版本号?(98,nt,2000)
- 临界区问题
- windows c++工程自动化编译
- 高分求教!做一个共同类,使得它所派生类中均能响应,F1,F3,F5,F6,F7,F9,F10,ENTER等键!
- 为什么域名大多数能够解析为IP,而IP很少能够被反解析成域名
一直recv,直到recv返回0为此。
assert(m_socket != NULL);
FD_SET fd = {1, m_socket};
TIMEVAL tv = {nSecs, 0};
if(select(0, &fd, NULL, NULL, &tv) == 0)
{
return -2;//超时,没有数据
}int nBytesReceived;
if((nBytesReceived = recv(m_socket, lpszBuf, nSize, 0)) == SOCKET_ERROR)
{
return -1;
}
nSecs可是设成2或3秒,这样超过3秒没有数据就返回,不会长时间堵塞