⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip组播技术综述4.htm

📁 windows网络编程技术文章
💻 HTM
📖 第 1 页 / 共 3 页
字号:
  <TR>
    <TD 
      class=a14>通过IP_MULTICAST_IF,系统管理员可在安装的时候为组播创建默认的接口(为从一个给定的网络接口并发传送,一个网络接口会忽略这个默认值)。例如:</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>struct in_addr addr;</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>setsockopt(sock,IPPROTO_IP,IP_MULTICAST_IF,&amp;addr,sizeof(addr));</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
  class=a14>在这里,addr是希望输出接口的本地IP地址,可使用一个INADDR_ANY地址来回送到默认的接口。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
class=a14>当组播组中的一台主机发送组播数据到输出接口时,默认的IP层将为本地回送数据的拷贝。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>IP_MULTICAST_LOOP网络参数控制IP层是否回送所送的数据。例如:</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>u_char loop;</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>setsockopt(sock,IPPROTO_IP,IP_MULTICAST_LOOP,&amp;loop,sizeof(loop));</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>将loop设置为0则禁止回送,设置为1则允许回送。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>为了能够接收IP组播数据,主机必须加入某个或多个组播组,程序通过使用IP_ADD_MEMBERSHIP网络接口参数向主机提出加入组播组的申请。例如:</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>struct ip_mreq</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>{struct in_addr imn_multiaddr; /* multicast group to join 
    */</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>struct in_addr imr_interface; /* interface to join on 
  */</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>}mreq;</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>setsockopt(sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,&amp;mreq,sizeof(mreq));</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>一个组的成员是与一个单一的网络接口相联系;主机可在不止一个网络接口上加入相同的组。若选择默认组播接口,要将imr_interface设置为INADDR_ANY;若选择主机其中一个本地地址,要将imr_interface设置为特定的组播接口。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>若撤消一个成员资格,使用IP_DROP_MEMBERSHIP</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>struct ip_mreq mreq;</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>setsockopt(sock,IPPROTP_IP,IP_DROP_MEMBERSHIP,&amp;mreq,sizeof(sreq));</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>其中mreq包含了在IP_ADD_MEMBERSHIP命令中相同的值。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>5.2.2 Windows Socket组播API</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>基于Winsock1.1的组播编程与Berkeley 
      Socket类似,这里不再赘述。Winsock2是Winsock1.1的扩展,除兼容Berkeley 
      Sockets组播API外,它还定义了一套支持IP组播的协议独立API,如表4所示:</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>
      <P align=center>表4 WinSock 2的协议独立组播API说明</P></TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>
      <TABLE class=MsoNormalTable 
      style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 59.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black 1.5pt; mso-yfti-tbllook: 31; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .75pt solid black; mso-border-insidev: .75pt solid black" 
      cellSpacing=0 cellPadding=0 border=1>
        <TBODY>
        <TR>
          <TD 
          style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 194pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-right-alt: .75pt; mso-border-left-alt: 1.5pt; mso-border-top-alt: 1.5pt; mso-border-bottom-alt: .75pt; mso-border-color-alt: black; mso-border-style-alt: solid" 
          vAlign=top width=259>
            <P class=MsoNormal><SPAN lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">WSAEnum 
            Protocol()<O:P> </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 184pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-right-alt: 1.5pt; mso-border-left-alt: .75pt; mso-border-top-alt: 1.5pt; mso-border-bottom-alt: .75pt; mso-border-color-alt: black; mso-border-style-alt: solid" 
          vAlign=top width=245>
            <P class=MsoNormal><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得协议信息结构</SPAN><SPAN 
            lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">(WASPROTOCOL_INFO)<O:P> 
            </O:P></SPAN></P></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 194pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=259>
            <P class=MsoNormal><SPAN lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">WSASocket()<O:P> 
            </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 184pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt; mso-border-left-alt: solid black .75pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=245>
            <P class=MsoNormal><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置组播类型</SPAN><SPAN 
            lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><O:P> 
            </O:P></SPAN></P></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 194pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=259>
            <P class=MsoNormal><SPAN lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">WSAJoinLeaf<O:P> 
            </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 184pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt; mso-border-left-alt: solid black .75pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=245>
            <P class=MsoNormal><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加入组播组并指定角色</SPAN><SPAN 
            lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">(</SPAN><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发送者</SPAN><SPAN 
            lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">/</SPAN><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接收者</SPAN><SPAN 
            lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">)<O:P> 
            </O:P></SPAN></P></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 194pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=259>
            <P class=MsoNormal><SPAN lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">WSAIoctl(…SIO_MULTICAST_SCOPE…)<O:P> 
            </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 184pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt; mso-border-left-alt: solid black .75pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=245>
            <P class=MsoNormal><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置</SPAN><SPAN 
            lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">IP 
            TTL<O:P> </O:P></SPAN></P></TD></TR>
        <TR style="mso-yfti-lastrow: yes">
          <TD 
          style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 194pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; mso-border-right-alt: .75pt; mso-border-left-alt: 1.5pt; mso-border-top-alt: .75pt; mso-border-bottom-alt: 1.5pt; mso-border-color-alt: black; mso-border-style-alt: solid" 
          vAlign=top width=259>
            <P class=MsoNormal><SPAN lang=EN-US 
            style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">WSAIoctl(…SIO_MULTICAST_LOOPBACK…)<O:P> 
            </O:P></SPAN></P></TD>
          <TD 
          style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 184pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; mso-border-left-alt: solid black .75pt; mso-border-top-alt: solid black .75pt" 
          vAlign=top width=245>
            <P class=MsoNormal><SPAN 
            style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">禁止组播数据回送</SPAN><SPAN 
            lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><O:P> 
            </O:P></SPAN></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>在Winsock2中,定义了“数据平面”(Data Plane)和“控制平面”(Control 
      Plane)的概念,其中,数据平面决定在不同的网络成员之间数据如何传送;控制平面定义网络成员的组织方式; 
      这两方面的特征既可以是“有根的”(Rooted),也可以是“无根的”(Nonrooted)。在“有根的”控制平面内,存在一个特殊的组播组成员,称作C_root(根节点),其余的组成员称作C_leaf(叶节点)。对“无根的”控制平面而言,只存在叶节点。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
      class=a14>在“有根的”平面中,根节点负责组播的建立,以及同任意数量叶节点的连接。叶节点可申请加入一个特定的组播组。数据传送只能在根节点和叶节点之间进行,根节点将数据组播到每个叶节点。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD 
  class=a14>在“无根的”平面中,只存在叶节点,它们可以任意加入一个组播组。从叶节点发送的数据会组播到每一个叶节点。</TD></TR></TBODY></TABLE>
<TABLE width=620 align=center>
  <TBODY>
  <TR>
    <TD class=a14>由于篇幅所限,有关Winsock API的进一步讨论,请参阅参考文献[3]、[5]和MSDN。</TD></TR>
  <TR>
    <TD class=a14>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -