首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

UDP+VC++

UDP+VC++

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();  


  • }  
返回列表