网络编程:组播发送接收
组播发送
**************************************************************************************************************
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
//本机IP
#define PORT 8888
#define IP "192.168.43.148"
//组播地址
#define mu_IP "224.1.2.3"
#define ERR_MSG(msg) do{\
fprintf(stderr,"__%d__\n",__LINE__);\
perror("msg");\
}while(0)
int main(int argc, const char *argv[])
{
//1、创建套接字
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(sfd<0)
{
ERR_MSG("socket");
return -1;
}
//加入多播组
struct ip_mreqn mreq;
mreq.imr_multiaddr.s_addr =inet_addr(mu_IP);//组播IP
mreq.imr_address.s_addr =inet_addr(IP);// 本机IP
mreq.imr_ifindex = if_nametoindex("ens37");
if(setsockopt(sfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))<0)
{
ERR_MSG("setsockopt");
return -1;
}
printf("加入多播组成功\n");
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);//端口号号(转为网络字节序)
sin.sin_addr.s_addr =inet_addr(mu_IP);//组播IP的网络字节序,要在224.0.0.0-239.255.255.255
//2、绑定组播IP地址、端口号和套接字生成的文件描述符
if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))<0)
{
ERR_MSG("bind");
return -1;
}
printf("Udp服务器绑定成功\n");
//变量初始化
char buf[32]="";
struct sockaddr_in cin;
socklen_t cinlen=sizeof(cin);
while(1)
{
//3、接收数据
ssize_t rcv=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&cinlen);
if(rcv<0)
{
ERR_MSG("recvfrom");
return -1;
}
printf("__%d__,%s:%d:%s\n",\
__LINE__,inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
}
//5、关闭套接字
close(sfd);
return 0;
}
**************************************************************************************************************
组播接收
**************************************************************************************************************
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
//组播的端口号和IP
#define SIN_PORT 8888
#define SIN_IP "224.1.2.3"
#define ERR_MSG(msg) do{\
fprintf(stderr,"__%d__\n",__LINE__);\
perror(msg);\
}while(0)
int main(int argc, const char *argv[])
{
//1、创建套接字(服务器端)
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(sfd<0)
{
ERR_MSG("socket");
return -1;
}
//接收方的地址信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SIN_PORT);//组播端口号(端口号转为网络字节序)
sin.sin_addr.s_addr =inet_addr(SIN_IP);//组播IP的网络字节序
//变量初始化
char buf[32]="";
socklen_t sinlen=sizeof(sin);
ssize_t sd=0;
while(1)
{
//4、发送数据,要指定发送到的地址
bzero(buf,sizeof(buf));
printf("要发送到服务器的数据-->");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;
sd = sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sinlen);
if(sd<0)
{
ERR_MSG("sendto");
return -1;
}
printf("发送成功\n");
}
//5、关闭套接字
close(sfd);
return 0;
}
网络编程:组播发送接收相关推荐
- Linux组播编程 组播发送和组播接收
接收端 int init_recv_socket(int *pSockfd) {int recv_sockfd = -1;struct ip_mreq mreq;bzero(&mreq, si ...
- Linux网络编程组播测试代码
Linux网络编程组播测试代码 (转载) 组播客户端代码如下: #include <sys/types.h> #include <sys/socket.h> #include ...
- iOS14 广播组播发送失败问题
我们App之前用到广播组播发送配网信息,然后设备收到信息后自动配网的功能.在iOS14以后的版本突然失效.调试发现是发送广播包一直失败,组播包也没发送成功.查阅了相关资料,发现需要申请一个广播包发送的 ...
- 组播发送端接收端,广播发送端接收端
1. 组播 1)概念 1. 广播方式是发送给同一网段下的所有主机,过多的广播会占用大量网络带宽,会造成广播风暴,影 响正常通讯: 2. 主机之间一对一组的通讯模式,也就是只有加入了同一个组的主机可以接 ...
- Linux网络编程——组播和广播
文章目录 前言 一.组播 二.广播 总结 前言 学习了TCP和UDP协议,可以发现TCP可靠但只能一对一且传输速度较慢:UDP不可靠,但可以一对多且传输速度快,由此不难发现,实现组播和广播的功能的,只 ...
- 嵌入式linux局域网组播发不了,组播 IP_MULTICAST_LOOP回环在Linux和Windows的差异
在TX2嵌入式开发板上(Ubuntu操作系统)编写网络组播发送接收程序,首先了解一下组播. linux多播编程 linux多播编程步骤: 1>建立一个socket; 2>设置多播的参数,例 ...
- JAVA 网络编程(5) SOCKET UDP 单播和组播,以及组播其他机器收不到报文的解决方法
UDP既可以单播也可以组播 一,单播 单播的过程为 发送方: InetAddress destAddr = InetAddress.getByName("192.168.4.199" ...
- lv6 网络编程(9)-网络编程扩展下
目录 前言 1.广播 1.1广播发送/接收: 2.组播 2.1网络地址: 2.2组播发送/发送 3.UNIX域套接字 3.1socket可以用于本地通信 3.3.1进程间通信: 3.2本地地址结构 3 ...
- Java的 网络编程
目录 什么是网络编程 网络编程三要素 IP IPv4 IPv6 ipv4的细节 InetAddress的使用 端口号 协议 UDP通信程序 练习:聊天室 UDP的三种通信方式 TCP通信程序 三次握手 ...
最新文章
- Unity3D研究院之与Android相互传递消息
- thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离
- rails中对应关系
- vnc远程桌面复制文件Linux,vncviewer远程桌面linux
- CEF:MFC 对话框 Demo(VS2013)
- Java程序员面试必备的一些流程图
- Careercup - Google面试题 - 4877486110277632
- 哈希表 - (代码、分析 )
- python3 gui tk代码_【基础】学习笔记30-python3 tkinter GUI编程-实操12
- spring 通过id 查询数据_Spring 数据初始 H2 后进行数据查询提示 Schema not found 错误...
- 一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)
- getshell工具下载批量ecshop4.0全版本通杀工具下载
- 矩正式键盘程序c语言,单片机键盘程序(4×4矩阵式)
- MAC小技巧|Mac屏幕截图去除窗口阴影
- 指针输出与取地址符输出
- 跨品种套利 (期货)
- dnf剑魂buff等级上限_DNF:护石2.0副本将至!新增“金币燃烧机”,30W点一下
- ZYNQ LWIP实验
- 虚拟机中的Linux系统如何联网?
- rtthread 线程