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

📄 c-netapi2.html

📁 Vxworks网络编程指南
💻 HTML
📖 第 1 页 / 共 4 页
字号:
        {         perror ("sendto");         close (sFd);         return (ERROR);         }      close (sFd);     return (OK);     }</a></b></pre></dl><dl class="margin"><dd><hr class="Line"></dl><dl class="margin"><dd><pre class="Code"><b><a name="89162">/* udpServer.c - UDP server example */  /* DESCRIPTION This file contains the server-side of the VxWorks UDP example code. The example code demonstrates the useage of several BSD 4.4-style socket routine calls. */  /* includes */ #include "vxWorks.h" #include "sockLib.h" #include "inetLib.h" #include "stdioLib.h" #include "strLib.h" #include "ioLib.h" #include "fioLib.h" #include "udpExample.h"   /********************************************************************* * * udpServer - read from UDP socket and display client's message if requested  * * Example of VxWorks UDP server: *       -&gt; sp udpServer *       task spawned: id = 0x3a1f6c, name = t2 *       value = 3809132 = 0x3a1f6c *       -&gt; MESSAGE FROM CLIENT (Internet Address 150.12.0.11, port 1028): *       Greetings from UDP client * * RETURNS: Never, or ERROR if a resources could not be allocated. */  STATUS udpServer (void)     {     struct sockaddr_in  serverAddr;    /* server's socket address */     struct sockaddr_in  clientAddr;    /* client's socket address */     struct request      clientRequest; /* request/Message from client */     int                 sockAddrSize;  /* size of socket address structure */     int                 sFd;           /* socket file descriptor */     char                inetAddr[INET_ADDR_LEN];                                        /* buffer for client's inet addr */      /* set up the local address */      sockAddrSize = sizeof (struct sockaddr_in);     bzero ((char *) &amp;serverAddr, sockAddrSize);     serverAddr.sa_len = (u_char) sockAddrSize;     serverAddr.sin_family = AF_INET;     serverAddr.sin_port = htons (SERVER_PORT_NUM);     serverAddr.sin_addr.s_addr = htonl (INADDR_ANY);      /* create a UDP-based socket */      if ((sFd = socket (AF_INET, SOCK_DGRAM, 0)) == ERROR)         {         perror ("socket");         return (ERROR);         }      /* bind socket to local address */      if (bind (sFd, (struct sockaddr *) &amp;serverAddr, sockAddrSize) == ERROR)         {         perror ("bind");         close (sFd);         return (ERROR);         }      /* read data from a socket and satisfy requests */      FOREVER         {         if (recvfrom (sFd, (char *) &amp;clientRequest, sizeof (clientRequest), 0,             (struct sockaddr *) &amp;clientAddr, &amp;sockAddrSize) == ERROR)             {             perror ("recvfrom");             close (sFd);             return (ERROR);             }          /* if client requested that message be displayed, print it */          if (clientRequest.display)             {             /* convert inet address to dot notation */              inet_ntoa_b (clientAddr.sin_addr, inetAddr);             printf ("MSG FROM CLIENT (Internet Address %s, port %d):\n%s\n",                 inetAddr, ntohs (clientAddr.sin_port), clientRequest.message);             }         }     } </a></b></pre></dl></dl><font face="Helvetica, sans-serif" class="sans"><h4 class="H4"><i><a name="89256">Using a Datagram (UDP) Socket to Access IP Multicasting </a></i></h4></font><dl class="margin"><dl class="margin"><dd><p class="Body"><a name="89258"> </a>Multicasting is the delivery of the same packets to multiple IP addresses. Typical multicasting applications include audio and video conferencing, resource discovery tools, and shared white boards. Multicasting is a feature of the IP layer, but to access this function, an application uses a UDP socket. </p><dd><p class="Body"><a name="89259"> </a>A VxWorks process must multicast on a network interface driver that supports multicasting (many do not). To review the capabilities of all attached network drivers, use <b class="routine"><i class="routine">ifShow</i></b><b>(&nbsp;)</b>. If a network interface supports multicasting, <b class="symbol_UC">IFF_MULTICAST</b> is listed among the flags for that network interface. </p><dd><p class="Body"><a name="89261"> </a>Multicast IP addresses range from 224.0.0.0 to 239.255.255.255. These addresses are also called class D addresses or multicast groups. A datagram with a class D destination address is delivered to every process that has joined the corresponding multicast group. </p><dd><p class="Body"><a name="89262"> </a>To multicast a packet, a VxWorks process need do nothing special. The process just sends to the appropriate multicast address. The process can use any normal UDP socket. To set the route to the destination multicast address, use <b class="routine"><i class="routine">routeAdd</i></b><b>(&nbsp;)</b>.</p><dd><p class="Body"><a name="89264"> </a>To receive a multicast packet, a VxWorks process must join a multicast group. To do this, the VxWorks process must set the appropriate socket options on the socket (see <a href="c-netapi2.html#89275">Table&nbsp;7-2</a>). <p class="table"><h4 class="EntityTitle"><a name="89275"><font face="Helvetica, sans-serif" size="-1" class="sans">Table 7-2:&nbsp;&nbsp;Multicasting Socket Options<sup><a href="#foot"><b class="FootnoteMarker">1</b></a></sup></font></a></h4><table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><th rowspan="1" colspan="1"><div class="CellHeading"><b><a name="89281"> </a><font face="Helvetica, sans-serif" size="-1" class="sans">Command</font></b></div></th><td width="10">&nbsp;</td><th rowspan="1" colspan="1"><div class="CellHeading"><b><a name="89283"> </a><font face="Helvetica, sans-serif" size="-1" class="sans">Argument</font></b></div></th><td width="10">&nbsp;</td><th rowspan="1" colspan="1"><div class="CellHeading"><b><a name="89285"> </a><font face="Helvetica, sans-serif" size="-1" class="sans">Description</font></b></div></th><td width="10">&nbsp;</td></tr><tr><td colspan="20"><hr class="tablerule2"></td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89288"> </a><b class="symbol_UC">IP_MULTICAST_IF</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89290"> </a><b class="symbol_lc">struct in_addr</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89292"> </a>Select default interface for outgoing multicasts.</div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89295"> </a><b class="symbol_UC">IP_MULTICAST_TTL</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89297"> </a><b class="symbol_lc">CHAR</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89299"> </a>Select default time to live (TTL) for outgoing multicast packets. </div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89302"> </a><b class="symbol_UC">IP_MULTICAST_LOOP</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89304"> </a><b class="symbol_lc">CHAR</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89306"> </a>Enable or disable loopback of outgoing multicasts. </div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89309"> </a><b class="symbol_UC">IP_ADD_MEMBERSHIP</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89311"> </a><b class="symbol_lc">struct ip_mreq</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89313"> </a>Join a multicast group. </div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89316"> </a><b class="symbol_UC">IP_DROP_MEMBERSHIP</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89318"> </a><b class="symbol_lc">struct ip_mreq</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89320"> </a>Leave a multicast group. </div></td><td width="10">&nbsp;</td></tr><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><td colspan="20"><p class="FootnoteNumberMarker">1:&nbsp;<span class="TableFootnote"><a name="89274"> </a>For more on multicasting socket options, see the <b class="routine"><i class="routine">setsockopt</i></b><b>(&nbsp;)</b> reference entry. </span></p></td></tr></table></p></p><dd><p class="Body"><a name="89321"> </a>When choosing an address upon which to multicast, remember that certain addresses and address ranges are already registered to specific uses and protocols. For example, 244.0.0.1 multicasts to all systems on the local subnet. The Internet Assigned Numbers Authority (IANA) maintains a list of registered IP multicast groups. The current list can be found in RFC 1700. For more information about the IANA, see RFC 1700. <a href="c-netapi2.html#89329">Table&nbsp;7-3</a> lists some of the well-known multicast groups.<p class="table"><h4 class="EntityTitle"><a name="89329"><font face="Helvetica, sans-serif" size="-1" class="sans">Table 7-3:&nbsp;&nbsp;Well-Known Multicast Groups </font></a></h4><table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><th rowspan="1" colspan="1"><div class="CellHeading"><b><a name="89335"> </a><font face="Helvetica, sans-serif" size="-1" class="sans">Group</font></b></div></th><td width="10">&nbsp;</td><th rowspan="1" colspan="1"><div class="CellHeading"><b><a name="89337"> </a><font face="Helvetica, sans-serif" size="-1" class="sans">VxWorks constant</font></b></div></th><td width="10">&nbsp;</td><th rowspan="1" colspan="1"><div class="CellHeading"><b><a name="89339"> </a><font face="Helvetica, sans-serif" size="-1" class="sans">Description</font></b></div></th><td width="10">&nbsp;</td></tr><tr><td colspan="20"><hr class="tablerule2"></td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89341"> </a>224.0.0.0</div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89343"> </a><b class="symbol_UC">INADDR_UNSPEC_GROUP</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89345"> </a>Reserved for protocols that implement IP unicast and multicast routing mechanisms. Datagrams sent to any of these groups are not forwarded beyond the local network by multicast routers.</div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89347"> </a>224.0.0.1</div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89349"> </a><b class="symbol_UC">INADDR_ALLHOSTS_GROUP</b></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89351"> </a>All systems on this subnet. This value is automatically added to all network drivers at initialization. </div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89353"> </a>224.0.0.2</div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89355"> </a></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89357"> </a>All routers on this subnet. </div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89359"> </a>224.0.0.3</div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89361"> </a></div></td><td width="10">&nbsp;</td><td colspan=1 rowspan=1><div class="CellBody"><a name="89363"> </a>Unassigned. </div></td><td width="10">&nbsp;</td></tr><tr valign="top"><td colspan=1 rowspan=1><div class="CellBody"><a name="89365"> </a>224.0.0.4</div>

⌨️ 快捷键说明

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