如果是一秒送几条还正常,如果是一秒送十来条就经常会再现调包
int CTcp::Send(char *buffer, int sendlen)
{
if (!m_bConnected)
{
return (0);
}
int sendedlen = send(m_sock, buffer, sendlen,0);
if (sendedlen == SOCKET_ERROR)
{
Close();
return (SOCKET_ERROR);
} return (sendedlen);
}
int CTcp::Send(char *buffer, int sendlen)
{
if (!m_bConnected)
{
return (0);
}
int sendedlen = send(m_sock, buffer, sendlen,0);
if (sendedlen == SOCKET_ERROR)
{
Close();
return (SOCKET_ERROR);
} return (sendedlen);
}
解决方案 »
- CCtrlView使用自定义类的问题?
- LoadLibrary执行DLL函数,出现错误
- _crtisvalidheappointer(pUserData)问题
- VC ADO "using namespace ADODB" 错误求助
- 纯资源DLL的问题。
- 怎么根据IP得到主机名或是域名
- 如何用VC++创建虚拟目录,有明白的吗?我急用,谢谢拉
- 菜鸟求助:如何用 MFC 编写切分窗口?
- COleTemplateServer::RegisterAll() 出错
- 大吐血~~。。。: dongfa(阿东) 来拿分~
- 请问有关“地址族”的问题
- 已知f(1) f(5)的值,求f(2)f(3)f(4)的值,高手们请进
如果想完全解决,应该在收到FD_WRITE后才调用send函数
FD_ZERO(&fdwrite);
FD_SET(m_sock,&fdwrite);
while (i<50)
{
if((Ret = select(0,NULL,&fdwrite,NULL,NULL)) == SOCKET_ERROR)
{
i ++;
Sleep(100);
}
else
break;
}
int sendedlen = send(m_sock, buffer, sendlen,0);
我这样写好像还是没用
int sendedlen = send(m_sock, buffer, sendlen,0);
Sleep(50);
这样都会掉包的话,我就无语了
接收端一样有缓冲
并不是说你发送时sleep了就不会粘