Linux下UDP收发广播消息简单实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux下UDP收发⼴播消息简单实现发送⼴播消息
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #include<sys/types.h>
5 #include<sys/socket.h>
6 #include<sys/wait.h>
7 #include<netinet/in.h>
8 #include<arpa/inet.h>
9 #include <errno.h>
10
11int main(void)
12 {
13char rgMessage[128] = "I am sending message to you!";
14int iFd;
15int iSendbytes;
16int iOptval = 1;
17struct sockaddr_in Addr;
18if ((iFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
19 {
20 printf("socket fail\n");
21return -1;
22 }
23
24if (setsockopt(iFd, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &iOptval, sizeof(int)) < 0)
25 {
26 printf("setsockopt failed!");
27 }
28 memset(&Addr, 0, sizeof(struct sockaddr_in));
29 Addr.sin_family = AF_INET;
30 Addr.sin_addr.s_addr = inet_addr("255.255.255.255");
31 Addr.sin_port = htons(8899);
32
33while (1)
34 {
35if ((iSendbytes = sendto(iFd, rgMessage, strlen(rgMessage), 0, (struct sockaddr*)&Addr, sizeof(struct sockaddr))) == -1)
36 {
37 printf("sendto fail, errno=%d\n", errno);
38return -1;
39 }
40 printf("rgMessage=%s, rgMessageLen=%d,iSendbytes=%d\n", rgMessage, strlen(rgMessage), iSendbytes);
41 sleep(1);
42 }
43 close(iFd);
44
45return0;
46 }
接收⼴播消息
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <sys/socket.h>
5 #include <netinet/in.h>
6 #include <arpa/inet.h>
7 #include <netdb.h>
8
9int main(void) {
10
11int iAddrLength;
12char rgMessage[2014];
13int iOptval = 1;
14int iFd;
15struct sockaddr_in Addr;
16
17if ((iFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
18 {
19 printf("socket fail\n");
20return -1;
21 }
22
23if (setsockopt(iFd, SOL_SOCKET, SO_REUSEADDR, &iOptval, sizeof(int)) < 0)
24 {
25 printf("setsockopt failed!\n");
26 }
27 memset(&Addr, 0, sizeof(struct sockaddr_in));
28 Addr.sin_family = AF_INET;
29 Addr.sin_addr.s_addr = INADDR_ANY;
30 Addr.sin_port = htons(8899);
31 iAddrLength = sizeof(Addr);
32
33if (bind(iFd, (struct sockaddr *)&Addr, sizeof(Addr)) == -1)
34 {
35 printf("bind failed!\n");
36 }
37
38while (1)
39 {
40if (recvfrom(iFd, rgMessage, sizeof(rgMessage), 0, (struct sockaddr *)&Addr, &iAddrLength) == -1)
41 {
42 printf("recv failed!\n");
43 }
44 printf("recv:%s\n", rgMessage);
45 }
46
47 close(iFd);
48
49return0;
50 }。