- 客户端
1 #include <stdio.h> 2 #include <string.h> 3 #include <winsock.h> 4 #pragma comment(lib,"ws2_32.lib") 5 6 void main() 7 { 8 //存放版本 9 WORD wversion; 10 //指针,存放网络执行信息 11 WSADATA wsadata; 12 //管理错误,标号 13 int err; 14 15 //客户端套接字,用于连接 16 SOCKET sockclient; 17 //服务器地址 18 SOCKADDR_IN addrserver; 19 //客户端地址 20 SOCKADDR_IN addrclienet; 21 22 //长度 23 int length = 0; 24 //接收 25 char recvstr[256] = { 0 }; 26 //标示 27 BOOL bflags=1; 28 //设定版本 29 wversion = MAKEWORD(2, 2); 30 err = WSAStartup(wversion, &wsadata); 31 if (err!=0) 32 { 33 printf("获取版本失败"); 34 return; 35 } 36 37 if (LOBYTE(wsadata.wVersion)!=2 || HIBYTE(wsadata.wVersion)!=2) 38 { 39 printf("版本对比失败,不一致"); 40 return; 41 } 42 //UDP报文传输 43 sockclient = socket(AF_INET, SOCK_DGRAM, 0); 44 //setsockopt()函数,用于任意类型、任意状态套接口的设置选项值。 45 //尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。 46 //多播必须指定的参数 47 //flags设定,1代表广播,0禁止广播 48 setsockopt(sockclient, SOL_SOCKET, SO_REUSEADDR, &bflags, sizeof(bflags)); 49 50 //存放客户端ip地址 51 addrclienet.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 52 addrclienet.sin_family = AF_INET; 53 addrclienet.sin_port = htons(9999);//端口 54 //客户端套接字与客户端信息绑定 55 bind(sockclient, (SOCKADDR*)&addrclienet, sizeof(SOCKADDR)); 56 //等于地址长度 57 length = sizeof(SOCKADDR); 58 while (1) 59 { 60 printf("wait-----------------\n"); 61 //从客户端接收消息,地址信息存放在addrserver中 62 recvfrom(sockclient, recvstr, 256, 0, (SOCKADDR*)&addrserver, &length); 63 if (WSAGetLastError()!=0) 64 { 65 puts("收取失败"); 66 } 67 //哪个服务器发送的 68 printf("%s speak %s\n", inet_ntoa(addrserver.sin_addr), recvstr); 69 } 70 closesocket(sockclient); 71 WSACleanup(); 72 system("pause"); 73 }
- 服务器端
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #include <winsock.h> 5 #pragma comment(lib,"ws2_32.lib") 6 7 void main() 8 { 9 WORD wversion;//存放版本 10 WSADATA wsadata;//指针,存放网络执行信息 11 int err;//管理错误,标号 12 13 SOCKET socksever;//服务器套接字 14 //记录服务器信息 15 SOCKADDR_IN addrserver; 16 //记录客户端信息 17 SOCKADDR_IN addrclienet; 18 19 int length = 0; 20 char sendstr[256] = { 0 }; 21 BOOL bflags = 1;//标示 22 wversion = MAKEWORD(2, 2);//设定版本 23 err = WSAStartup(wversion, &wsadata); 24 if (err != 0) 25 { 26 printf("获取版本失败"); 27 return; 28 } 29 30 if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2) 31 { 32 printf("版本对比失败,不一致"); 33 return; 34 } 35 36 socksever = socket(AF_INET, SOCK_DGRAM, 0);//报文 37 // SO_BROADCAST多播必须指定的参数 38 //flags设定,1代表广播,0禁止广播 39 setsockopt(socksever, SOL_SOCKET, SO_BROADCAST, &bflags, sizeof(bflags));//绑定 40 41 addrserver.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//任意主机 42 addrserver.sin_family = AF_INET; 43 addrserver.sin_port = htons(7888);//端口 44 45 //服务器信息与套接字绑定 46 bind(socksever, (SOCKADDR*)&addrserver, sizeof(SOCKADDR));//绑定 47 48 //填写广播,255.255.255.255,广播 49 addrclienet.sin_addr.S_un.S_addr = inet_addr("255.255.255.255"); 50 addrclienet.sin_family = AF_INET; 51 addrclienet.sin_port = htons(9999);//端口 52 53 length = sizeof(SOCKADDR);//保存地址长度 54 55 while (1) 56 { 57 memset(sendstr, 0, 256); 58 scanf("%s", sendstr);//获取读取 59 //发送消息到客户端(广播) 60 sendto(socksever, sendstr, strlen(sendstr), 0, (SOCKADDR*)&addrclienet, length); 61 } 62 closesocket(socksever); 63 WSACleanup(); 64 system("pause"); 65 }
105.UDP通信实现广播
Posted 喵小喵~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了105.UDP通信实现广播相关的知识,希望对你有一定的参考价值。
以上是关于105.UDP通信实现广播的主要内容,如果未能解决你的问题,请参考以下文章