日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sock使用UDP协议进行广播发送数据

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sock使用UDP协议进行广播发送数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用ifconfig命令查看自己的廣播地址:

wlp3s0b1 Link encap:以太網(wǎng) 硬件地址 inet 地址:192.168.1.102 廣播:192.168.1.255 掩碼:255.255.255.0

可以看到主機的廣播地址是192.168.1.255

編寫UDP服務(wù)器程序:

#include <sys/socket.h> #include <netdb.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <time.h> #include <arpa/inet.h>int sockfd;void sig_handler(int signo);int main(int argc, char * argv[]) {if(argc < 2){printf("usage: %s port\n", argv[0]);exit(1);}if(signal(SIGINT, sig_handler) == SIG_ERR) //開始捕獲信號 SIGINT {perror("signal sigint error!");exit(1);}/*步驟1: 創(chuàng)建socket*/sockfd = socket(AF_INET, SOCK_DGRAM, 0);if(sockfd < 0){perror("socket error!");exit(1);}/*步驟2: 調(diào)用bind函數(shù)對socket和地址進行綁定*/struct sockaddr_in serveraddr;memset(&serveraddr, 0, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(atoi(argv[1])); //portserveraddr.sin_addr.s_addr = INADDR_ANY; //ip匹配所有的ipif(bind(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0){perror("bind error!");exit(1);}struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);char buffer[1024];while(1){memset(buffer, 0, sizeof(buffer));memset(&clientaddr, 0, sizeof(clientaddr));if(recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&clientaddr, &len) < 0){perror("recvfrom error!");exit(1);}else{char ip[16];inet_ntop(AF_INET, &clientaddr.sin_addr.s_addr, ip, sizeof(ip));int port = ntohs(clientaddr.sin_port);printf("%s(%d): %s\n", ip, port, buffer);}} }void sig_handler(int signo) {if(signo == SIGINT){printf("receiver clolse!\n");;close(sockfd);exit(1);} }

編寫UDP廣播程序:

#include <sys/socket.h> #include <netdb.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <time.h> #include <arpa/inet.h>int sockfd;void sig_handler(int signo);int main(int argc, char * argv[]) {if(argc < 3){printf("usage: %s port\n", argv[0]);exit(1);}if(signal(SIGINT, sig_handler) == SIG_ERR) //開始捕獲信號 SIGINT {perror("signal sigint error!");exit(1);}/*步驟1: 創(chuàng)建socket*/sockfd = socket(AF_INET, SOCK_DGRAM, 0);if(sockfd < 0){perror("socket error!");exit(1);}int opt = 1;setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt));/*步驟2: 調(diào)用bind函數(shù)對socket和地址進行綁定*/struct sockaddr_in serveraddr;memset(&serveraddr, 0, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(atoi(argv[2])); //portinet_ntop(AF_INET, (struct sockaddr*)&serveraddr.sin_addr.s_addr,argv[1], sizeof(argv[1]));printf("I will broadcast...\n");char *info = "hello Andrew";size_t size = strlen(info) * sizeof(char);if(sendto(sockfd, info, size, 0, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0){perror("sendto error!");exit(1);}else{printf("broadcastn success!\n");}}void sig_handler(int signo) {if(signo == SIGINT){printf("receiver clolse!\n");;close(sockfd);exit(1);} }

測試:

運行服務(wù)器:

andrew@andrew-Thurley:~/work/network$ bin/receiver 8888 127.0.0.1(35423): hello Andrew 127.0.0.1(43304): hello Andrew 127.0.0.1(58134): hello Andrew 127.0.0.1(53262): hello Andrew 127.0.0.1(35285): hello Andrew 127.0.0.1(58630): hello Andrew 127.0.0.1(41278): hello Andrew 127.0.0.1(39032): hello Andrew 127.0.0.1(55642): hello Andrew 127.0.0.1(44132): hello Andrew 127.0.0.1(35112): hello Andrew

運行客戶端:

andrew@andrew-Thurley:~/work/network$ bin/broadcast 192.168.1.255 usage: bin/broadcast port andrew@andrew-Thurley:~/work/network$ bin/broadcast 192.168.1.255 8888 I will broadcast... broadcastn success! andrew@andrew-Thurley:~/work/network$ bin/broadcast 192.168.1.255 8888 I will broadcast... broadcastn success! andrew@andrew-Thurley:~/work/network$ bin/broadcast 192.168.1.255 8888

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的sock使用UDP协议进行广播发送数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。