当前位置: 首页 > news >正文

网站建设实务课本网站品牌打造

网站建设实务课本,网站品牌打造,数字媒体艺术与ui设计相关吗,杭州网络营销写在前面 由于公司业务需要用到组播实现#xff0c;这里就记录下学习过程。在学习组播之前#xff0c;我们先来看看另外两种数据包传输方式#xff1a;单播和广播。 单播#xff1a;简单来说就是数据一对一发送#xff0c;如果需要给多个主机发送数据时#xff0c;就需…写在前面 由于公司业务需要用到组播实现这里就记录下学习过程。在学习组播之前我们先来看看另外两种数据包传输方式单播和广播。 单播简单来说就是数据一对一发送如果需要给多个主机发送数据时就需要将同一份源数据的多次拷贝发送给这些主机。无疑加重了源主机以及网络带宽的压力。这种传输方式不利于批量传输数据。广播不需要这些信息的主机也会收到该信息数据的安全性得不到保证还会造成同一网段内的信息泛滥浪费带宽。可以看到这种传输方式不利于给特定的用户传输数据。 一、什么是组播 组播Multicast又称“多播”是一种数据包传输方式。它以尽力而为的形式发送信息到某个目标组这个目标组称为组播组。 源主机向多个主机发送数据时源主机只发送一份数据数据的目的地址是组播组地址。这样凡是属于该组的成员都可以接收到一份源主机发送的数据的拷贝此组播方式下只有真正信息需要的成员会收到信息其他主机不会收到。 组播相较于单播和广播的优势 相较于单播被传递的信息只会在距信息源尽可能远的网络节点才开始被复制和分发用户的增加不会导致信息源负载的加重以及网络资源消耗的显著增加。相较于广播被传递的信息只会发送给需要该信息的接收者所以不会造成网络资源的浪费并能提高信息传输的安全性。 小结当有多台主机同时成为一个数据包的接受者时出于对带宽和CPU负担的考虑组播成为了一种最佳选择。 1.1 组播相关术语 组播组用组播地址标识的一组主机集合组播源数据的发送者组播成员加入某个组播组的主机组播路由器运行组播协议的设备 1.2 组播如何工作 组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址有一台源主机发出目的地址是以上范围组播地址的报文在网络中如果有其他主机对于这个组的报文有兴趣的可以申请加入这个组并可以接受这个组而其他不是这个组的成员是无法接受到这个组的报文的。 1.3 组播实现原理 上面说到了组播路由器这里我们着重看下这个组播路由器的作用。 用户根据IGMP协议发送请求报文路由器收到IGMP报文后会把用户加入自己的组播组组播报文到达路由器时根据组播组复制多份数据发给组内的所有主机。 注意IGMP报文并不是发给路由器它的目的地址只有目标主机报文从用户到目标主机可能经历多个路由器用户必须加入这些路由器的组播组为什么呢因为只有用户加入了这条路径上所有的路由器的组播组之后组播源发出的数据才能在经过层层路由是转发到正确的目标用户。 发送IGMP报文需要知道组播源的IP地址那用户是如何知道组播源的IP地址的呢答案是RPRendezvous Point集中点具体来说就是让组播源知道RP的IP地址让用户知道RP的IP地址。 获取组播源IP地址 组播源通过单播的方式把组播 239.0.0.2 封装在一个单播发送给RPsrc_ip: 192.168.60.213, dst_ip: 192.168.60.210用户D向RP发送请求加入组播239.0.0.2 的IGMP报文RP收到请求后把组播源发送的单播数据复制一份发送给用户D用户D收到报文后解析就能拿到组播源的IP地址192.168.60.213 组播实现 接收端发送IGMP报文给组播源经过的所有路由器都会把接受端加入组播组239.0.0.2组播源发送数据到组播组 239.0.0.2路由器收到数据具体发给谁由路由器的路由表决定 二、组播代码示例 2.1 server端组播源 MulticastServer.h #include iostream #include stdio.h #include unistd.h #include string.h #include arpa/inet.h #include net/if.h #include errno.h #include string#define SERVER_PORT 8000 #define CLIENT_PORT 9000 #define GROUP 239.0.0.2using namespace std;class MulticastServer{ public:MulticastServer();~MulticastServer();bool Init();void SendMessage(string payloadMessage);private:int m_sockfd;struct sockaddr_in m_serveraddr, m_clientaddr; };MulticastServer.cpp #include MulticastServer.hbool MulticastServer::Init() {m_sockfd socket(AF_INET, SOCK_DGRAM, 0); /*构造用于UDP通信的套接字*/bzero(m_serveraddr, sizeof(m_serveraddr));m_serveraddr.sin_family AF_INET; /* IPv4 */m_serveraddr.sin_addr.s_addr htonl(INADDR_ANY); /*本地任意IP INADDR_ANY 0 */m_serveraddr.sin_port htons(SERVER_PORT);bind(m_sockfd, (struct sockaddr *)m_serveraddr, sizeof(m_serveraddr));struct ip_mreqn group;inet_pton(AF_INET, GROUP, group.imr_multiaddr); /*设置组播组的地址*/inet_pton(AF_INET, 0.0.0.0, group.imr_address); /* 本地任意IP 自动分配有效IP*/group.imr_ifindex if_nametoindex(enp5s0); /* 给出网卡名转换为对应编号eth0 -- 编号 命令:ip ad */int ret setsockopt(m_sockfd, IPPROTO_IP, IP_MULTICAST_IF, group, sizeof(group)); /*获取组播权限*/if (ret 0) {printf(Fail to disable multicast loop, err: %s,strerror(errno));return false;}else{printf(disable multicast loop success.\n);}// ret setsockopt(m_sockfd, IPPROTO_IP , IP_MULTICAST_LOOP, group, sizeof(group));bzero(m_clientaddr, sizeof(m_clientaddr)); /* 构造client 地址 IP端口号*/m_clientaddr.sin_family AF_INET;inet_pton(AF_INET, GROUP, m_clientaddr.sin_addr.s_addr); /* IPv4 239.0.0.29000 */m_clientaddr.sin_port htons(CLIENT_PORT);return true; }void MulticastServer::SendMessage(string payloadMessage) {// sprintf(buf, from 192.168.60.213 server info: multicast %d\n, i);//fgets(buf, sizeof(buf), stdin);sendto(m_sockfd, (char*)payloadMessage.c_str(), payloadMessage.size(), 0, (struct sockaddr *)m_clientaddr, sizeof(m_clientaddr)); }main.c #include MulticastServer.hint main(int argc, char *argv[]) {MultiBroadcastServer server;server.init();int idx 0;while(true){idx;std::string msg from 192.168.60.213 server info: multicast to_string(idx) \n;server.SendMessage(msg);sleep(1);}return 0; }2.2 client端接收端 MulticastClient.h #include iostream #include stdio.h #include unistd.h #include string.h #include arpa/inet.h #include net/if.h #include errno.h #include string#define SERVER_PORT 8000 #define CLIENT_PORT 9000 #define GROUP 239.0.0.2using namespace std;class MulticastClient{ public:MulticastClient();~MulticastClient();bool Init();void recvMessage(char* buffer, int len);private:int m_confd;struct sockaddr_in m_clientaddr; };MulticastClient.cpp #include MulticastClient.hbool MulticastClient::Init() {struct ip_mreqn group; /*组播结构体*/m_confd socket(AF_INET, SOCK_DGRAM, 0);bzero(m_clientaddr, sizeof(m_clientaddr)); /* 初始化*/m_clientaddr.sin_family AF_INET;inet_pton(AF_INET, 0.0.0.0 , m_clientaddr.sin_addr.s_addr);m_clientaddr.sin_port htons(CLIENT_PORT);bind(m_confd, (struct sockaddr *)m_clientaddr, sizeof(m_clientaddr));inet_pton(AF_INET, GROUP, group.imr_multiaddr); /* 设置组播组地址*/inet_pton(AF_INET, 0.0.0.0, group.imr_address); /*使用本地任意IP添加到组播组*/group.imr_ifindex if_nametoindex(enp5s0); /* 设置网卡名 编号 ip ad */ setsockopt(m_confd, IPPROTO_IP, IP_ADD_MEMBERSHIP, group, sizeof(group));/* 将client加入组播组*/return true; }void MulticastClient::recvMessage(char* buffer, int len) {len recvfrom(m_confd, buffer, sizeof(buffer), 0, NULL, 0);std::cout client recv: std::string(buffer) , len : len std:endl; }main.c #include MulticastClient.hint main(int argc, char *argv[]) {MulticastClient client;client.init();while(true){char buffer[BUFSIZ] {0};int len 0;client.recvMessage(buffer, len);}return 0; }
http://www.tj-hxxt.cn/news/220768.html

相关文章:

  • wordpress文章类模板厦门seo服务
  • 做网站需要公司如何做国际网站首页
  • 姜堰哪里有网站建设的.网站建设的基本步骤
  • 汕头seo关键词排名网站背景图片优化
  • 网站建设的标语dede企业网站
  • 网站是先备案还是先做网站景德镇网站建设景德镇
  • 施工企业税收筹划seo自动刷外链工具
  • 3d打印加工平台怀化seo快速排名
  • 达州+网站建设wordpress删除分类目录
  • 网站城市分站织梦系统怎么看网站使用什么做的
  • 深圳网站制作公司哪家好做什麽网站有前景
  • 重庆网站设计哪家公司好如何线上推广引流
  • 做网站品查找网站开发者
  • 做网站需要团队还是一个人wordpress代码目录结构
  • 网站建设制作 南京公司哪家好启业网查询官网
  • 单位不能建设网站阿里巴巴的网络营销方式
  • 企业培训考试系统做博客的seo技巧
  • 自己设置免费网站设计平台网站制作流程是什么
  • 公司优化网站的案例如何判断网站是否被k
  • 甜品网站模板代码秦皇岛市做公司网站的
  • 网站建设公司做销售好不好上海仓储公司
  • 克隆网站首页做单页站几个文件夹网站服务器租用注意事项
  • 织梦做的网站怎么上传视频教程视频网站用什么做的好
  • 网站空间购买费用西安建设工程信息网网上招投标业务平台
  • 昆明网站设计制造wordpress cdn系统
  • 网站怎么做查询系统如何推广店铺呢
  • 怎么做电影网站app网站轮播图片特效
  • 贺州网站推广在线智能识图
  • 合肥建网站公司地址网站开发 自我评价
  • 小榄网站建设网上哪些网站可以做兼职