105.UDP通信實現廣播
阿新 • • 發佈:2018-03-02
pri recvfrom 指針 use rtu 記錄 inet_addr 參數 body
- 客戶端
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;
- 服務器端
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通信實現廣播