UDP广播

匿名 (未验证) 提交于 2019-12-02 23:57:01

广播是在局域网之间的一对多的通信方式,使用的udp协议

/*** client.c ***/ #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h>  #define SERVER_PORT 8000 #define MAXLINE 4096 #define CLIENT_PORT 9000  int main(int argc, char *argv[]) {     struct sockaddr_in localaddr;     int confd;     ssize_t len;     char buf[MAXLINE];      //1.创建一个socket     confd = socket(AF_INET, SOCK_DGRAM, 0);      //2.初始化本地端地址     bzero(&localaddr, sizeof(localaddr));     localaddr.sin_family = AF_INET;     inet_pton(AF_INET, "0.0.0.0" , &localaddr.sin_addr.s_addr);     localaddr.sin_port = htons(CLIENT_PORT);      int ret = bind(confd, (struct sockaddr *)&localaddr, sizeof(localaddr));  //显示绑定不能省略     if (ret == 0)         printf("...bind ok...\n");      while (1) {         len = recvfrom(confd, buf, sizeof(buf), 0, NULL, 0);         write(STDOUT_FILENO, buf, len);     }     close(confd);      return 0; }
/*** server.c ***/ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/socket.h> #include <string.h> #include <arpa/inet.h> #include <net/if.h>  #define SERVER_PORT 8000                                    /* 无关紧要 */ #define MAXLINE 1500  #define BROADCAST_IP "192.168.42.255" #define CLIENT_PORT 9000                                    /* 重要 */  int main(void) {     int sockfd;     struct sockaddr_in serveraddr, clientaddr;     char buf[MAXLINE];      /* 构造用于UDP通信的套接字 */     sockfd = socket(AF_INET, SOCK_DGRAM, 0);      bzero(&serveraddr, sizeof(serveraddr));     serveraddr.sin_family = AF_INET;                        /* IPv4 */     serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);         /* 本地任意IP INADDR_ANY = 0 */     serveraddr.sin_port = htons(SERVER_PORT);      bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));      int flag = 1;     setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag));      /*构造 client 地址 IP+端口  192.168.7.255+9000 */     bzero(&clientaddr, sizeof(clientaddr));     clientaddr.sin_family = AF_INET;     inet_pton(AF_INET, BROADCAST_IP, &clientaddr.sin_addr.s_addr);     clientaddr.sin_port = htons(CLIENT_PORT);      int i = 0;     while (1) {         sprintf(buf, "Drink %d glasses of water\n", i++);         //fgets(buf, sizeof(buf), stdin);         sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&clientaddr, sizeof(clientaddr));         sleep(1);     }     close(sockfd);     return 0; }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!