下面是我在vc6.0中用到的udp实现通信,由于不怕数据的丢失,故而没有设计通信头来使数据传输变得可靠。我只需接收到多少用多少。(后期修改 将同步字节增加为2个
)
server:
1.socket
2.设置接收超时时间
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
int optlen = sizeof(struct timeval);
if ( setsockopt(m_hSocket,SOL_SOCKET,SO_RCVTIMEO,(char*)&tv,optlen) ==
SOCKET_ERROR)
{
strError.Format("set Error:%d ",error=WSAGetLastError());
AfxMessageBox(strError);
closesocket(m_hSocket);
return ;
}
3.bind
4.do{
Ret=recvfrom(pDlg->m_hSocket, sendBuf, 258, 0,(SOCKADDR*)&Client, &len);
if (sendBuf[0]=='R')
{
sendBuf[0]='A';
sendto(pDlg->m_hSocket,sendBuf,sizeof(sendBuf),0,(SOCKADDR*)&Client, len);
}
} while (Ret<=0);
//此处是与client同步
5.循环recvfrom接收数据 由于有了超时时间 当udp接收不到数据那么 将会超时。
client
1.socket
2. buf[0]='R';
sendto(myclient,buf,sizeof(buf),0,(SOCKADDR*)&addrcl, len);
Ret=recvfrom(myclient, buf, 258, 0,(SOCKADDR*)&addrcl, &len);
与server同步
3.用sendto循环发送数据
阅读(5961) | 评论(0) | 转发(0) |