Linux网络编程之广播

本文探讨了Linux下的广播通信,讲解了如何通过广播寻找局域网内的服务器。示例展示了如何创建数据报套接字,设置广播选项,并发送及接收广播包,以探测服务器的存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概念

前面介绍的TCP,UDP都是单播方式,即一对一.而广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:

(1)确定一个发送广播的接口,如eth0

(2)确定广播的地址,通过ioctl函数,请求码设置为SIOCGIFBRDADDR得到广播的地址

(3)使用这个广播地址进行广播

由于TCP协议是端到端的协议,在通信之前,必须建立连接,三次握手之后才能发送数据。而广播是一对多的通信,所以TCP不支持广播。在局域网内,广播通常用来探测服务器。

2. 探测服务器实例

这个例子通过在局域网内发送广播包,收到广播包的服务器,应答主机。这样,就能够探测到局域网内的服务器。

主机:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<netdb.h>
#include <sys/ioctl.h>
#include <net/if.h>
/**
客户端实现广播


**/
#define IP_FOUND "IP_FOUND"
#define IP_FOUND_ACK "IP_FOUND_ACK"
#define IFNAME "eth0"
#define MCAST_PORT 9999
int main(int argc,char*argv[]){
int ret=-1;
int sock=-1;
int so_broadcast=1;
struct ifreq ifr;
struct sockaddr_in broadcast_addr;//广播地址
struct sockaddr_in from_addr;//服务端地址
int from_len=sizeof(from_addr);
int count=-1;
fd_set readfd;//读文件描述符集合
char buffer[1024];
struct timeval timeout;
timeout.tv_sec=2;//超时时间为2秒
timeout.tv_usec=0;
sock=socket(AF_INET,SOCK_DGRAM,0);//建立数据报套接字
if

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值