服务器端:指定客户端为地址为.255的广播,端口号固定,给sfd给广播权限
客户端:必须固定端口地址和服务器发送的广播端口一致;
server:
1 #include<stdio.h>
2 #include<netinet/in.h>
3 #include<stdlib.h>
4 #include<unistd.h>
5 #include<sys/types.h>
6 #include<sys/socket.h>
7 #include<assert.h>
8 #include<arpa/inet.h>
9 #include<string.h>
10 #include<ctype.h>
11 #define BUFF_SIZE 64
12 #define BROADCAST "192.168.1.255"
13 int main(int argc, char*argv[])
14 {
15 if(argc < 3)
16 {
17 printf("argc less 3\n");
18 exit(1);
19 }
20 const char * ip=argv[1];
21 int port=atoi(argv[2]);
22
23 struct sockaddr_in saddr,caddr;
24
25 int sfd = socket(AF_INET,SOCK_DGRAM,0);
26
27 int flag;
28 setsockopt(sfd,SOL_SOCKET,SO_BROADCAST,&flag,sizeof(flag));
29
30 bzero(&saddr,sizeof(saddr));
31 saddr.sin_family=AF_INET;
32 saddr.sin_port=htons(port);
33 inet_pton(AF_INET,ip,&saddr.sin_addr.s_addr);
34 int ret = bind(sfd,(struct sockaddr*)&saddr,sizeof(saddr));
35 assert(ret != -1);
36
37 char buff[BUFF_SIZE],str[BUFF_SIZE];
38 int i=0;
39 memset(buff,'\0',BUFF_SIZE);
40
41
42 bzero(&caddr,sizeof(saddr));
43 caddr.sin_family=AF_INET;
44 caddr.sin_port=htons(9000);
45 inet_pton(AF_INET,BROADCAST,&saddr.sin_addr.s_addr);
46 while(1)
47 {
48 sprintf(buff,"server message %d \b",i++);
49 sendto(sfd,buff,strlen(buff),0,(struct sockaddr*)&caddr,sizeof(caddr));
50 printf("send buff = %s\n",buff);
51 sleep(1);
52 }
53
54 close(sfd);
55 return 0;
56 }
执行服务器:
send buff = server message 0
send buff = server message 1
send buff = server message 2
send buff = server message 3
send buff = server message 4
send buff = server message 5
send buff = server message 6
send buff = server message 7
send buff = server message 8
send buff = server message 9
send buff = server message 10
client
1 #include<stdio.h>
2 #include<netinet/in.h>
3 #include<stdlib.h>
4 #include<sys/types.h>
5 #include<sys/socket.h>
6 #include<assert.h>
7 #include<arpa/inet.h>
8 #include<string.h>
9 #include<unistd.h>
10 #include<ctype.h>
11 #define BUFF_SIZE 64
12 int main(int argc, char*argv[])
13 {
14 const char * ip="0.0.0.0";
15 int port=atoi("9000");
16
17 struct sockaddr_in caddr;
18 caddr.sin_family=AF_INET;
19 caddr.sin_port=htons(port);
20 inet_pton(AF_INET,ip,&caddr.sin_addr.s_addr);
21
22 int cfd = socket(AF_INET,SOCK_DGRAM,0);
23 bind(cfd,(struct sockaddr*)&caddr,sizeof(caddr));
24 char buff[BUFF_SIZE],str[BUFF_SIZE];
25 int i;
26 memset(buff,'\0',BUFF_SIZE);
27 while(1)
28 {
29
30 int ret = recvfrom(cfd,buff,BUFF_SIZE-1,0,NULL,NULL);
31 assert(ret!=-1);
32 write(STDOUT_FILENO,buff,ret);
33 printf("\n");
34
35 }
36
37 return 0;
38 }
执行客户端:
server message 0
server message 1
server message 2
server message 3
server message 4
server message 5
server message 6
server message 7
server message 8
server message 9
来源:CSDN
作者:YanWenCheng_
链接:https://blog.csdn.net/YanWenCheng_/article/details/104359792