一个UDP实现广播的小例子

 UDP 是USER DATAGRAM PROTOCAL 的简称,是一种在网络上提供的无连接的传输协议。

  用UDP通信有以 下特点:

  • 1、 数据传输不用建立连接,所以不可靠;
  • 2、 数据的发送是面向整个网络的,任何一台在局域网内的计算机都可以接收到相同的数据; 

参考其他地方,弄一个简单的例子,希望起到抛砖引玉的作用,同时希望能给初次接触UDP之BROADCAST编程的童鞋一些参考。

 

recv端

 

#include #include #include #pragma comment(lib,"ws2_32.lib") int main() { SOCKET sock; sockaddr_in from,a; WSADATA wsdata; bool optval; //启动SOCKET库,版本为2.0 WSAStartup(0x0202,&wsdata); optval=true; //然后赋值给两个地址,一个用来绑定套接字,一个用来从网络上的广播地址接收消息; a.sin_family=AF_INET; a.sin_addr.s_addr=0; a.sin_port=htons(9000); from.sin_family=AF_INET; from.sin_addr.s_addr=INADDR_BROADCAST; from.sin_port=htons(5050); int fromlength=sizeof(SOCKADDR); //用UDP初始化套接字 sock=socket(AF_INET,SOCK_DGRAM,0); // 设置该套接字为广播类型, setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval)); // 把该套接字绑定在一个具体的地址上 bind(sock,(sockaddr *)&a,sizeof(sockaddr_in)); char buf[256]; while(1) {//从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的 recvfrom(sock,buf,256,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength); Sleep(2000); printf("%sock/n",buf); ZeroMemory(buf,256); } retu

 

 

send端

#include #include #include #pragma comment(lib,"ws2_32.lib") int main() { SOCKET sock; sockaddr_in addrto; WSADATA wsdata; bool bsocket; char *smsg="this is a test"; //启动SOCKET库,版本为2.0 WSAStartup(0x0202,&wsdata); sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); bsocket=true; //然后赋值给地址,用来从网络上的广播地址接收消息; addrto.sin_family=AF_INET; addrto.sin_addr.s_addr=INADDR_BROADCAST; addrto.sin_port=htons(9000); bool opt=true; //设置该套接字为广播类型, setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt)); int nlen=sizeof(addrto); while(1) { Sleep(1000); //从广播地址发送消息 int ret=sendto(sock,smsg,256,0,(sockaddr*)&addrto,nlen); if(ret==SOCKET_ERROR) { printf("%d/n",WSAGetLastError()); } else { printf("It'sock OK./n"); } } return 0; }

 

你可能感兴趣的:(网络编程,socket,网络,struct,编程,null,user)