C語(yǔ)言廣播的使用詳解
向子網(wǎng)中多臺(tái)計(jì)算機(jī)發(fā)送消息,并且子網(wǎng)中所有的計(jì)算機(jī)都可以接收到發(fā)送方發(fā)送的消息,每個(gè)廣播消息都包含一個(gè)特殊的IP地址,這個(gè)IP中子網(wǎng)內(nèi)主機(jī)標(biāo)志部分的二進(jìn)制全部為1(也就是網(wǎng)絡(luò)號(hào)是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)建一個(gè)通信的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)建一個(gè)廣播的地址
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ò)號(hào)使用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)建一個(gè)通信的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語(yǔ)言廣播的使用詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言廣播內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(143.鏈表重排序)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(143.鏈表重排序),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
基于C語(yǔ)言的開(kāi)源csv解析庫(kù)MiniCSV的使用示例
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言中的開(kāi)源csv解析庫(kù)——MiniCSV的使用示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07
C語(yǔ)言實(shí)現(xiàn)古代時(shí)辰計(jì)時(shí)與現(xiàn)代時(shí)間換算
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)古代時(shí)辰計(jì)時(shí)與現(xiàn)代時(shí)間換算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-03-03
基于C++實(shí)現(xiàn)的哈夫曼編碼解碼操作示例
這篇文章主要介紹了基于C++實(shí)現(xiàn)的哈夫曼編碼解碼操作,結(jié)合實(shí)例形式分析了C++實(shí)現(xiàn)的哈夫曼編碼解碼相關(guān)定義與使用技巧,需要的朋友可以參考下2018-04-04
C語(yǔ)言中打印特殊圖案的實(shí)現(xiàn)代碼
以下代碼實(shí)現(xiàn)了在C語(yǔ)言中打印特殊圖案的解決方法。需要的朋友參考下2013-05-05

