手机qq网页版网站,沧州手机网站开发,六安公司网,中山网站seo优化1.广播
发送端#xff08;类似于客户端#xff09;
流程#xff1a; 创建套接字 填充接收端#xff08;服务器#xff09;网络信息结构体 bind(非必须绑定) 设置允许广播 向接收端#xff08;服务器#xff09;发送数据 关闭套接字文件
#include stdio.h
#in…1.广播
发送端类似于客户端
流程 创建套接字 填充接收端服务器网络信息结构体 bind(非必须绑定) 设置允许广播 向接收端服务器发送数据 关闭套接字文件
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h#define ERR_MSG(msg) do{\fprintf(stderr,LINE:__%d__,__LINE__);\perror(msg);\
}while(0)#define PORT 3333
#define IP 172.17,94.255int main(int argc, const char *argv[])
{int fd socket(AF_INET,SOCK_DGRAM,0);if(-1 fd){ERR_MSG(socket);return -1;}//填充接受端的网络信息结构体struct sockaddr_in recvaddr;recvaddr.sin_family AF_INET;recvaddr.sin_port htons(PORT);recvaddr.sin_addr.s_addr inet_addr(IP);//可绑可不绑//设置允许广播int broad 1;if(-1 setsockopt(fd,SOL_SOCKET,SO_BROADCAST,\broad,sizeof(broad))){ERR_MSG(setsockopt);return -1;}printf(broad set success broad %d\n,broad);char buf[128] ;ssize_t res 0;while(1){//向服务器发送数据bzero(buf,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;if(-1 sendto(fd,buf,sizeof(buf),0,\(struct sockaddr*)recvaddr,sizeof(recvaddr))){ERR_MSG(sendto);return -1;}printf(sendto success\n);}//关闭套接字close(fd);return 0;
}接收端类似于服务器
流程 创建套接字 填充接收端本身服务器的网络信息结构体 bind必须) 绑定套接字和自身的网络信息结构体 新建一个网络信息结构体用来存储发送端的地址信息 接受发送端发来的数据 关闭套接字
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h#define ERR_MSG(msg) do{\fprintf(stderr,LINE:__%d__,__LINE__);\perror(msg);\
}while(0)#define PORT 3333
#define IP 172.17,94.255int main(int argc, const char *argv[])
{int fd socket(AF_INET,SOCK_DGRAM,0);if(-1 fd){ERR_MSG(socket);return -1;}//填充接受端的网络信息结构体struct sockaddr_in recvaddr;int len sizeof(recvaddr);recvaddr.sin_family AF_INET;recvaddr.sin_port htons(PORT);recvaddr.sin_addr.s_addr inet_addr(IP);//必须绑定if(-1 bind(fd,(struct sockaddr*)recvaddr,len)){ERR_MSG(bind);return -1;}printf(bind success\n);//新建一个网络信息结构体用来存储接受的数据从哪来struct sockaddr_in sendaddr;int sendlen sizeof(sendaddr);char buf[128] ;ssize_t res 0;while(1){//接受发送端客户端发来的数据bzero(buf,sizeof(buf));if(-1 recvfrom(fd,buf,sizeof(buf),0,\(struct sockaddr*)sendaddr,sendlen)){ERR_MSG(recvfrom);return -1;}printf(recvfrom success\n);printf([%s:%d] msg:%s\n,inet_ntoa(sendaddr.sin_addr),\ntohs(sendaddr.sin_port),buf);}//关闭套接字close(fd);return 0;
}广播
发送端类似于客户端
流程 创建套接字 填充接收端服务器的网络信息结构体 IP为广播组的IP地址 bind(非必须) 设置允许广播 发送广播信息 关闭套接字
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h#define ERR_MSG(msg) do{\fprintf(stderr,LINE:__%d__,__LINE__);\perror(msg);\
}while(0)#define PORT 3333
#define IP 224.1.2.3int main(int argc, const char *argv[])
{int fd socket(AF_INET,SOCK_DGRAM,0);if(-1 fd){ERR_MSG(socket);return -1;}//填充接受端的网络信息结构体struct sockaddr_in recvaddr;recvaddr.sin_family AF_INET;recvaddr.sin_port htons(PORT);recvaddr.sin_addr.s_addr inet_addr(IP);//可绑可不绑//设置允许广播int broad 1;if(-1 setsockopt(fd,SOL_SOCKET,SO_BROADCAST,\broad,sizeof(broad))){ERR_MSG(setsockopt);return -1;}printf(broad set success broad %d\n,broad);char buf[128] ;ssize_t res 0;while(1){//向服务器发送数据bzero(buf,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;if(-1 sendto(fd,buf,sizeof(buf),0,\(struct sockaddr*)recvaddr,sizeof(recvaddr))){ERR_MSG(sendto);return -1;}printf(sendto success\n);}//关闭套接字close(fd);return 0;
}接收端类似于服务器
流程 创建套接字 填充接收端自身、服务器的网络信息结构体广播组IP… bind必须绑定绑定服务器与套接字 填充广播组的网络信息结构体广播组IP,本地IP,网卡编号 滴滴查询网卡编号ifconfig 查看使用的是哪个网卡再 ip ad 查看对应的编号 添加广播组 新建一个网络信息结构体用来存储发送端的地址信息 循环接受信息 关闭套接字
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h#define ERR_MSG(msg) do{\fprintf(stderr,LINE:__%d__,__LINE__);\perror(msg);\
}while(0)#define PORT 3333
#define IP 224.1.2.3int main(int argc, const char *argv[])
{int fd socket(AF_INET,SOCK_DGRAM,0);if(-1 fd){ERR_MSG(socket);return -1;}//填充接受端的网络信息结构体struct sockaddr_in recvaddr;int len sizeof(recvaddr);recvaddr.sin_family AF_INET;recvaddr.sin_port htons(PORT);recvaddr.sin_addr.s_addr inet_addr(IP);//必须绑定if(-1 bind(fd,(struct sockaddr*)recvaddr,len)){ERR_MSG(bind);return -1;}printf(bind success\n);//加入多播组struct ip_mreqn mq;mq.imr_multiaddr.s_addr inet_addr(IP);//多播组的组mq.imr_address.s_addr inet_addr(172.17.94.145);//本地mq.imr_ifindex 3;//网络设备编号指定网卡号if(-1 setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,\mq,sizeof(mq))){ERR_MSG(setsockopt);return -1;}printf(membership set succes );//新建一个网络信息结构体用来存储接受的数据从哪来struct sockaddr_in sendaddr;int sendlen sizeof(sendaddr);char buf[128] ;ssize_t res 0;while(1){//接受发送端客户端发来的数据bzero(buf,sizeof(buf));res recvfrom(fd,buf,sizeof(buf),0,\(struct sockaddr*)sendaddr,sendlen);if(-1 res){ERR_MSG(recvfrom);return -1;}else if(0 res){printf(发送端退出\n);break;}printf(recvfrom success\n);printf([%s:%d] msg:%s\n,inet_ntoa(sendaddr.sin_addr),\ntohs(sendaddr.sin_port),buf);}//关闭套接字close(fd);return 0;
}结果