C語言廣播的使用詳解
向子網(wǎng)中多臺計算機(jī)發(fā)送消息,并且子網(wǎng)中所有的計算機(jī)都可以接收到發(fā)送方發(fā)送的消息,每個廣播消息都包含一個特殊的IP地址,這個IP中子網(wǎng)內(nèi)主機(jī)標(biāo)志部分的二進(jìn)制全部為1(也就是網(wǎng)絡(luò)號是255)。
? a. 只能在局域網(wǎng)中使用。
? b. 客戶端需要綁定服務(wù)器廣播使用的端口,才可以接收到廣播消息。
只能在局域網(wǎng)中使用;
// 設(shè)置廣播屬性的函數(shù)
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t
optlen);
- 參數(shù):
- sockfd : 文件描述符
- level : SOL_SOCKET
- optname : SO_BROADCAST
- optval : int類型的值,為1表示允許廣播
- optlen : optval的大小
廣播代碼較UDP代碼需要做的改變:
- 服務(wù)端需要設(shè)置廣播屬性
- 服務(wù)端不需要使用bind進(jìn)行綁定;
- 客戶端需要綁定服務(wù)端使用的端口;
//Server #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> int main() { // 1.創(chuàng)建一個通信的socket int fd = socket(PF_INET, SOCK_DGRAM, 0); if(fd == -1) { perror("socket"); exit(-1); } // 2.設(shè)置廣播屬性 int op = 1; setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &op, sizeof(op)); // 3.創(chuàng)建一個廣播的地址 struct sockaddr_in cliaddr; cliaddr.sin_family = AF_INET; cliaddr.sin_port = htons(9999); inet_pton(AF_INET, "192.168.193.255", &cliaddr.sin_addr.s_addr); --注意網(wǎng)絡(luò)號使用255 // 3.通信 int num = 0; while(1) { char sendBuf[128]; sprintf(sendBuf, "hello, client....%d\n", num++); // 發(fā)送數(shù)據(jù) sendto(fd, sendBuf, strlen(sendBuf) + 1, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); printf("廣播的數(shù)據(jù):%s\n", sendBuf); sleep(1); } close(fd); return 0; }
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> int main() { // 1.創(chuàng)建一個通信的socket int fd = socket(PF_INET, SOCK_DGRAM, 0); if(fd == -1) { perror("socket"); exit(-1); } struct in_addr in; // 2.客戶端綁定本地的IP和端口 struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(9999); addr.sin_addr.s_addr = INADDR_ANY; int ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); if(ret == -1) { perror("bind"); exit(-1); } // 3.通信 while(1) { char buf[128]; // 接收數(shù)據(jù) int num = recvfrom(fd, buf, sizeof(buf), 0, NULL, NULL); printf("server say : %s\n", buf); } close(fd); return 0; }
服務(wù)端:
客戶端1: 192.168.193.128
客戶端2: 192.168.193.129
到此這篇關(guān)于C語言廣播的使用詳解的文章就介紹到這了,更多相關(guān)C語言廣播內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)LeetCode(143.鏈表重排序)
這篇文章主要介紹了C++實現(xiàn)LeetCode(143.鏈表重排序),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言實現(xiàn)古代時辰計時與現(xiàn)代時間換算
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實現(xiàn)古代時辰計時與現(xiàn)代時間換算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-03-03