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