SOCKET 收发数据
1、发送端在Send的时候要检查每次每次发送的数据长度是否达到了总的数据长度。若没有达到,则继续发送剩下的内容直到所有的数据全部发送完毕。而且在每次Send之后加一个延时,否则数据发送就不对,延迟时间多少合适要看情况而定。
例如:
while(pSocket->m_iCountLength<sizeof(g_TestResult))
{
int sndLen=send(pSocket->m_socket,(char*)(&g_TestResult)+pSocket->m_iCountLength,sizeof (g_TestResult)-pSocket->m_iCountLength,0);
Sleep(1000); //每次发送前给个延迟
pSocket->m_iCountLength=pSocket->m_iCountLength+sndLen;
}
{
int sndLen=send(pSocket->m_socket,(char*)(&g_TestResult)+pSocket->m_iCountLength,sizeof (g_TestResult)-pSocket->m_iCountLength,0);
Sleep(1000); //每次发送前给个延迟
pSocket->m_iCountLength=pSocket->m_iCountLength+sndLen;
}
2、接收方同样要检查接收到的数据长度,直到所有数据接收完毕。在检查是否有读取事件的时候要给合适的延迟。
TIMEVAL aTime1;
aTime1.tv_sec = 2;
aTime1.tv_usec = 0;
ret = select(0,&fdRead,NULL,NULL,&aTime1);
aTime1.tv_sec = 2;
aTime1.tv_usec = 0;
ret = select(0,&fdRead,NULL,NULL,&aTime1);
上一篇: 用skinmagic给VC6开发的软件换肤 下一篇: VC6.0 -> DDK_XP -> DriverStudio3.2
发表评论 评论 (0 个评论)