UDP是面向无连接的,只要设置对方的IP和端口就可以发送数据了。当要指定本地端口时可以使用bind来绑定端口。
UDP服务器和UDP客户端其实是一样的,。差别就是服务器必须bind否则客户端无法发送数据到达,而客户端也何以使用bind的。
备忘一下。
这是给一个学妹写的一个UDP客户端测试程序。这个程序广播39个字节,并接收应答。
- #include <WinSock2.h>
- #include <stdio.h>
- void main(void)
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- int len=10;
- int ReLen;
- unsigned char Buf[1024];
- int i;
- wVersionRequested=MAKEWORD(1,1);//请求协议版本
- err=WSAStartup(wVersionRequested,&wsaData);
- if(err!=0)
- {
- return ;
- }
- //检查协议版本
- if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
- {
- WSACleanup();
- return ;
- }
- SOCKET scokClient=socket(AF_INET,SOCK_DGRAM,0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//inet_addr("192.168.1.255");
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(1500);
- err=bind(scokClient,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
- if(err!=0)
- {
- printf("bind fail\n");
- return ;
- }
- addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.255");
- addrSrv.sin_port=htons(1500);
- sendto(scokClient,"123456789012345678901234567890123456789",sizeof("123456789012345678901234567890123456789")-1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
- len=sizeof(SOCKADDR);
- ReLen=recvfrom(scokClient,(char *)Buf,100,0,(SOCKADDR*)&addrSrv,&len);
- printf("Relen=%d\n",ReLen);
- if(ReLen>0)
- {
- for (i=0;i<ReLen;i++)
- {
- printf("%X ",Buf);
- }
- }
- printf("\n");
- len=sizeof(SOCKADDR);
- ReLen=recvfrom(scokClient,(char *)Buf,100,0,(SOCKADDR*)&addrSrv,&len);
- printf("Relen=%d\n",ReLen);
- if(ReLen>0)
- {
- for (i=0;i<ReLen;i++)
- {
- printf("%02X ",Buf);
- }
- }
- printf("\n");
- closesocket(scokClient);
- WSACleanup();
- }
|