服务端
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int sock = socket(AF_INET, SOCK_DGRAM, 0);
// 设置套接字的广播属性(SO_BROADCAST),以允许发送广播数据包
int val = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val));
struct sockaddr_in myaddr;
myaddr.sin_family = AF_INET;
myaddr.sin_addr.s_addr = INADDR_ANY;
myaddr.sin_port = htons(6666);
if(bind(sock, (struct sockaddr*)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind");
return 1;
}
struct sockaddr_in dst_addr;
dst_addr.sin_family = AF_INET;
//dst_addr.sin_addr.s_addr = inet_addr("192.168.0.255");
dst_addr.sin_addr.s_addr = inet_addr("255.255.255.255");
dst_addr.sin_port = htons(23456);
char msg[100] = "你是笨小孩!";
while(1)
sendto(sock, msg, strlen(msg), 0, (struct sockaddr*)&dst_addr, sizeof(dst_addr));
close(sock);
return 0;
}
客户端
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int socket_fd;
char IP[100];
socket_fd = socket(AF_INET,SOCK_DGRAM,0);
if(socket_fd < 0) perror("sokcet fail");
//绑定广播地址
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(23456);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY>本机任意IP地址--常用方法
//send_addr.sin_addr.s_addr = inet_addr(GUANG_IP);//广播>地址
bind(socket_fd,(struct sockaddr *)&my_addr,sizeof(my_addr));
struct sockaddr_in recv_addr;
socklen_t addrlen = sizeof(recv_addr);
while(1)
recvfrom(socket_fd, IP, sizeof(IP), 0, (struct sockaddr *)&recv_addr, &addrlen);
//char* ip = inet_ntoa(recv_addr.sin_addr);//可以获取到已连接服务端的IP地址
close(socket_fd);
return 0;
}