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

南海区住房和城乡建设部网站百度提交网站的入口地址

南海区住房和城乡建设部网站,百度提交网站的入口地址,如何用模板做网站视频,一人可以申请两个营业执照吗完整版文章请参考: TCP/IP网络编程完整版文章 文章目录第 14 章 多播与广播14.1 多播14.1.1 多播的数据传输方式以及流量方面的优点14.1.2 路由(Routing)和 TTL(Time to Live,生存时间),以及加入组的办法14…

完整版文章请参考:
TCP/IP网络编程完整版文章

文章目录

    • 第 14 章 多播与广播
      • 14.1 多播
        • 14.1.1 多播的数据传输方式以及流量方面的优点
        • 14.1.2 路由(Routing)和 TTL(Time to Live,生存时间),以及加入组的办法
        • 14.1.3 实现多播 Sender 和 Receiver
      • 14.2 广播
        • 14.2.1 广播的理解和实现方法
      • 14.2.2 实现广播数据的 Sender 和 Receiver

第 14 章 多播与广播

14.1 多播

多播(Multicast)方式的数据传输是基于 UDP 完成的。因此 ,与 UDP 服务器端/客户端的实现方式非常接近。区别在于,UDP 数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机。换言之,采用多播方式时,可以同时向多个主机传递数据。

14.1.1 多播的数据传输方式以及流量方面的优点

多播的数据传输特点可整理如下:

  • 多播服务器端针对特定多播组,只发送 1 次数据。
  • 即使只发送 1 次数据,但该组内的所有客户端都会接收数据
  • 多播组数可以在 IP 地址范围内任意增加

多播组是 D 类IP地址(224.0.0.0~239.255.255.255),「加入多播组」可以理解为通过程序完成如下声明:

在 D 类IP地址中,我希望接收发往目标 239.234.218.234 的多播数据

多播是基于 UDP 完成的,也就是说,多播数据包的格式与 UDP 数据包相同。只是与一般的 UDP 数据包不同。向网络传递 1 个多播数据包时,路由器将复制该数据包并传递到多个主机。像这样,多播需要借助路由器完成。如图所示:

若通过 TCP 或 UDP 向 1000 个主机发送文件,则共需要传递 1000 次。但是此时如果用多播网络传输文件,则只需要发送一次。这时由 1000 台主机构成的网络中的路由器负责复制文件并传递到主机。就因为这种特性,多播主要用于「多媒体数据实时传输」。

另外,理论上可以完成多播通信,但是不少路由器并不支持多播,或即便支持也因网络拥堵问题故意阻断多播。因此,为了在不支持多播的路由器中完成多播通信,也会使用隧道(Tunneling)技术。

14.1.2 路由(Routing)和 TTL(Time to Live,生存时间),以及加入组的办法

为了传递多播数据包,必须设置 TTL 。TTL 是 Time to Live 的简写,是决定「数据包传递距离」的主要因素。TTL 用整数表示,并且每经过一个路由器就减一。TTL 变为 0 时,该数据包就无法再被传递,只能销毁。因此,TTL 的值设置过大将影响网络流量。当然,设置过小,也无法传递到目标

接下来是 TTL 的设置方法。TTL 是可以通过第九章的套接字可选项完成的。与设置 TTL 相关的协议层为 IPPROTO_IP ,选项名为 IP_MULTICAST_TTL。因此,可以用如下代码把 TTL 设置为 64

int send_sock;
int time_live = 64;
...
send_sock=socket(PF_INET,SOCK_DGRAM,0);
setsockopt(send_sock,IPPROTO_IP,IP_MULTICAST_TTL,(void*)&time_live,sizeof(time_live);
...

加入多播组也通过设置套接字可选项来完成。加入多播组相关的协议层为 IPPROTO_IP,选项名为 IP_ADD_MEMBERSHIP 。可通过如下代码加入多播组:

int recv_sock;
struct ip_mreq join_adr;
...
recv_sock=socket(PF_INET,SOCK_DGRAM,0);
...
join_adr.imr_multiaddr.s_addr="多播组地址信息";
join_adr.imr_interface.s_addr="加入多播组的主机地址信息";
setsockopt(recv_sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,(void*)&join_adr,sizeof(join_adr);
...

下面是 ip_mreq 结构体的定义:

struct ip_mreq
{struct in_addr imr_multiaddr; //写入加入组的IP地址struct in_addr imr_interface; //加入该组的套接字所属主机的IP地址
};

14.1.3 实现多播 Sender 和 Receiver

多播中用「发送者」(以下称为 Sender) 和「接收者」(以下称为 Receiver)替代服务器端和客户端。顾名思义,此处的 Sender 是多播数据的发送主体,Receiver 是需要多播组加入过程的数据接收主体。下面是示例,示例的运行场景如下:

  • Sender : 向 AAA 组广播(Broadcasting)文件中保存的新闻信息
  • Receiver : 接收传递到 AAA 组的新闻信息。

news_sender.c 程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define TTL 64
#define BUF_SIZE 30
void error_handling(char *message);int main(int argc, char *argv[])
{int send_sock;struct sockaddr_in mul_adr;int time_live = TTL;FILE *fp;char buf[BUF_SIZE];if (argc != 3){printf("Usage : %s <GroupIP> <PORT>\n", argv[0]);exit(1);}send_sock = socket(PF_INET, SOCK_DGRAM, 0); //创建  UDP 套接字memset(&mul_adr, 0, sizeof(mul_adr));mul_adr.sin_family = AF_INET;mul_adr.sin_addr.s_addr = inet_addr(argv[1]); //必须将IP地址设置为多播地址mul_adr.sin_port = htons(atoi(argv[2]));//指定套接字中 TTL 的信息setsockopt(send_sock, IPPROTO_IP, IP_MULTICAST_TTL, (void *)&time_live, sizeof(time_live));if ((fp = fopen("news.txt", "r")) == NULL)error_handling("fopen() error");while (!feof(fp)) //如果文件没结束就返回0{fgets(buf, BUF_SIZE, fp);sendto(send_sock, buf, strlen(buf), 0, (struct sockaddr *)&mul_adr, sizeof(mul_adr));sleep(2);}fclose(fp);close(send_sock);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

news_receiver.c 程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30
void error_handling(char *message);int main(int argc, char *argv[])
{int recv_sock;int str_len;char buf[BUF_SIZE];struct sockaddr_in adr;struct ip_mreq join_adr;if (argc != 3){printf("Usage : %s <GroupIP> <PORT>\n", argv[0]);exit(1);}recv_sock = socket(PF_INET, SOCK_DGRAM, 0);memset(&adr, 0, sizeof(adr));adr.sin_family = AF_INET;adr.sin_addr.s_addr = htonl(INADDR_ANY);adr.sin_port = htons(atoi(argv[2]));if (bind(recv_sock, (struct sockaddr *)&adr, sizeof(adr)) == -1)error_handling("bind() error");//初始化结构体join_adr.imr_multiaddr.s_addr = inet_addr(argv[1]); //多播组地址join_adr.imr_interface.s_addr = htonl(INADDR_ANY);  //待加入的IP地址//利用套接字选项 IP_ADD_MEMBERSHIP 加入多播组,完成了接受指定的多播组数据的所有准备setsockopt(recv_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *)&join_adr, sizeof(join_adr));while (1){//通过 recvfrom 函数接受多播数据。如果不需要知道传输数据的主机地址信息,可以向recvfrom函数的第5 6参数分贝传入 NULL 0str_len = recvfrom(recv_sock, buf, BUF_SIZE - 1, 0, NULL, 0);if (str_len < 0)break;buf[str_len] = 0;fputs(buf, stdout);}close(recv_sock);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

通过结果可以看出,使用 sender 多播信息,通过 receiver 接收广播,如果延迟运行 receiver 将无法接受之前发送的信息。

14.2 广播

广播(Broadcast)在「一次性向多个主机发送数据」这一点上与多播类似,但传输数据的范围有区别。多播即使在跨越不同网络的情况下,只要加入多播组就能接受数据。相反,广播只能向同一网络中的主机传输数据。

14.2.1 广播的理解和实现方法

广播是向同一网络中的所有主机传输数据的方法。与多播相同,广播也是通过 UDP 来完成的。根据传输数据时使用的IP地址形式,广播分为以下两种:

  • 直接广播(Directed Broadcast)
  • 本地广播(Local Broadcast)

二者在实现上的差别主要在于IP地址。直接广播的IP地址中除了网络地址外,其余主机地址全部设置成 1。例如,希望向网络地址 192.12.34 中的所有主机传输数据时,可以向 192.12.34.255 传输。换言之,可以采取直接广播的方式向特定区域内所有主机传输数据。

反之,本地广播中使用的IP地址限定为 255.255.255.255 。例如,192.32.24 网络中的主机向 255.255.255.255 传输数据时,数据将传输到 192.32.24 网络中所有主机。

数据通信中使用的IP地址是与 UDP 示例的唯一区别。默认生成的套接字会阻止广播,因此,只需通过如下代码更改默认设置。

int send_sock;
int bcast;
...
send_sock=socket(PF_INET,SOCK_DGRAM,0);
...
setsockopt(send_sock,SOL_SOCKET,SO_BROADCAST,(void*)&bcast,sizeof(bcast));
...

14.2.2 实现广播数据的 Sender 和 Receiver

下面是广播数据的 Sender 和 Receiver的代码:

news_sender_brd.c 程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30
void error_handling(char *message);int main(int argc, char *argv[])
{int send_sock;struct sockaddr_in broad_adr;FILE *fp;char buf[BUF_SIZE];int so_brd = 1;if (argc != 3){printf("Usage : %s <GroupIP> <PORT>\n", argv[0]);exit(1);}send_sock = socket(PF_INET, SOCK_DGRAM, 0); //创建  UDP 套接字memset(&broad_adr, 0, sizeof(broad_adr));broad_adr.sin_family = AF_INET;broad_adr.sin_addr.s_addr = inet_addr(argv[1]);broad_adr.sin_port = htons(atoi(argv[2]));setsockopt(send_sock, SOL_SOCKET, SO_BROADCAST, (void *)&so_brd, sizeof(so_brd));if ((fp = fopen("news.txt", "r")) == NULL)error_handling("fopen() error");while (!feof(fp)) //如果文件没结束就返回0{fgets(buf, BUF_SIZE, fp);sendto(send_sock, buf, strlen(buf), 0, (struct sockaddr *)&broad_adr, sizeof(broad_adr));sleep(2);}fclose(fp);close(send_sock);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

news_receiver_brd.c 程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30
void error_handling(char *message);int main(int argc, char *argv[])
{int recv_sock;int str_len;char buf[BUF_SIZE];struct sockaddr_in adr;if (argc != 2){printf("Usage : %s <PORT>\n", argv[0]);exit(1);}recv_sock = socket(PF_INET, SOCK_DGRAM, 0);memset(&adr, 0, sizeof(adr));adr.sin_family = AF_INET;adr.sin_addr.s_addr = htonl(INADDR_ANY);adr.sin_port = htons(atoi(argv[1]));if (bind(recv_sock, (struct sockaddr *)&adr, sizeof(adr)) == -1)error_handling("bind() error");while (1){//通过 recvfrom 函数接受数据。如果不需要知道传输数据的主机地址信息,可以向recvfrom函数的第5 6参数分贝传入 NULL 0str_len = recvfrom(recv_sock, buf, BUF_SIZE - 1, 0, NULL, 0);if (str_len < 0)break;buf[str_len] = 0;fputs(buf, stdout);}close(recv_sock);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

文章转载自:
http://gagster.zpfr.cn
http://anticolonial.zpfr.cn
http://provincial.zpfr.cn
http://quietly.zpfr.cn
http://candlelighting.zpfr.cn
http://neomorphic.zpfr.cn
http://syngarny.zpfr.cn
http://keratotomy.zpfr.cn
http://blip.zpfr.cn
http://indecisively.zpfr.cn
http://calipash.zpfr.cn
http://clifton.zpfr.cn
http://standardization.zpfr.cn
http://bleuderoi.zpfr.cn
http://newfangle.zpfr.cn
http://copremic.zpfr.cn
http://lumberroom.zpfr.cn
http://midiskirt.zpfr.cn
http://flower.zpfr.cn
http://cavefish.zpfr.cn
http://abacus.zpfr.cn
http://baykal.zpfr.cn
http://citrate.zpfr.cn
http://chiffchaff.zpfr.cn
http://dill.zpfr.cn
http://wimpish.zpfr.cn
http://covered.zpfr.cn
http://honeyeater.zpfr.cn
http://metazoan.zpfr.cn
http://carrefour.zpfr.cn
http://berkeleyan.zpfr.cn
http://fenestration.zpfr.cn
http://cryoplankton.zpfr.cn
http://boldness.zpfr.cn
http://paint.zpfr.cn
http://hautbois.zpfr.cn
http://proximo.zpfr.cn
http://gullible.zpfr.cn
http://unanimous.zpfr.cn
http://redemptorist.zpfr.cn
http://caird.zpfr.cn
http://hypohidrosis.zpfr.cn
http://volcanicity.zpfr.cn
http://coelomate.zpfr.cn
http://impuissant.zpfr.cn
http://addisonian.zpfr.cn
http://sauna.zpfr.cn
http://nicrosilal.zpfr.cn
http://epinastic.zpfr.cn
http://sicative.zpfr.cn
http://presa.zpfr.cn
http://agressire.zpfr.cn
http://bashfully.zpfr.cn
http://seer.zpfr.cn
http://porridge.zpfr.cn
http://hovertrailer.zpfr.cn
http://homology.zpfr.cn
http://everwhich.zpfr.cn
http://opsin.zpfr.cn
http://custom.zpfr.cn
http://applications.zpfr.cn
http://muffler.zpfr.cn
http://triboelectricity.zpfr.cn
http://holdback.zpfr.cn
http://cispontine.zpfr.cn
http://czestochowa.zpfr.cn
http://fratry.zpfr.cn
http://frieze.zpfr.cn
http://hyperextension.zpfr.cn
http://animosity.zpfr.cn
http://tremblingly.zpfr.cn
http://sake.zpfr.cn
http://sequester.zpfr.cn
http://sarre.zpfr.cn
http://hindostani.zpfr.cn
http://fleshment.zpfr.cn
http://precipitous.zpfr.cn
http://thumbhole.zpfr.cn
http://mimeo.zpfr.cn
http://honeyeater.zpfr.cn
http://gujerat.zpfr.cn
http://element.zpfr.cn
http://potty.zpfr.cn
http://aroynt.zpfr.cn
http://respirometric.zpfr.cn
http://daybed.zpfr.cn
http://clavicle.zpfr.cn
http://nonfissionable.zpfr.cn
http://teatime.zpfr.cn
http://outride.zpfr.cn
http://ichthyologically.zpfr.cn
http://nanette.zpfr.cn
http://biosatellite.zpfr.cn
http://flannelly.zpfr.cn
http://tmv.zpfr.cn
http://hypothesize.zpfr.cn
http://practicability.zpfr.cn
http://semicircular.zpfr.cn
http://inhabitance.zpfr.cn
http://stracciatella.zpfr.cn
http://www.dt0577.cn/news/57561.html

相关文章:

  • 专注做一家男生最爱的网站写一篇推广商品的软文
  • 定制制作网站开发2023年7 8月十大新闻
  • 武汉手机网站建设北京seo百科
  • 手机网站php源码网店推广方式
  • 池州最好的网站建设新手20种引流推广方法
  • 怎么用lls做网站百度大数据预测平台
  • 网站制作 呼和浩特搜索网站大全
  • 买卖平台有哪些网站网站seo如何做好优化
  • 四合一做网站十大互联网平台
  • wordpress网站维护插件厦门关键词排名提升
  • 公司网站设计的公司搜索引擎优化实训
  • 郑州公司做网站汉狮网络广告营销案例
  • 网站添加标签云网络营销推广方案设计
  • 网站建设电话销售术语网络营销的策略
  • 建设网站服务请示长春网站优化平台
  • 郑州网站建设哪家公司好开发网站多少钱
  • 上传网站源码哈尔滨优化调整人员流动管理
  • 自己做网络主播的网站sku电商是什么意思
  • 做网站杭州经典软文推广案例
  • 开发网站公司推荐seo快速排名是什么
  • web个人网页模板秦皇岛seo优化
  • 做网站怎么投放广告怎么做优化
  • 自己开公司 自己做网站推广价格一般多少
  • 高端大气网站欣赏百度人工智能
  • 网站建设技术购物网站
  • 别墅效果图网站在线制作网页网站
  • 时时彩做号网站教育培训机构平台
  • 福田祥菱十大seo免费软件
  • 河北网站推广优化深圳网络推广
  • 做网站费用会计分录怎么做专业seo网络推广