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

📄 95.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>123</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="54.htm">上一层</a>][<a href="96.htm">下一篇</a>]
<hr><p align="left"><small>发信人: clown (梧桐叶), 信区: UNP <br>

标  题: unp第二十章学习体会 <br>

发信站: UNIX编程 (2001年10月10日21:25:23 星期三), 站内信件 <br>

  <br>

本章介绍的是高级udp编程,实际上就是在udp套接口中 <br>

完成以下几件事情: <br>

  <br>

1)得到接收到的报文的目的ip地址,也就是要知道是本 <br>

地主机的哪块网卡的哪个ip地址收到的该报文。 <br>

  <br>

书上介绍的是使用套接口选项IP_RECVDSTADDR和IP_RECVIF, <br>

然后使用recvmsg函数得到这些信息,然而Linux不支持 <br>

这两个选项,我通过测试,发现可以使用getsockname得到 <br>

udp报文的目的ip和端口,而具体是哪个接口接收的该报文 <br>

没有简便的方法得到。 <br>

  <br>

2)给udp应用程序增加可靠性 <br>

主要就超时重传(处理数据报丢失)和给报文添加一个序列 <br>

号(验证数据的有效性)。实现方法就是在udp报文前面添加 <br>

两个字段:序列号字段和服务器返回的时间戳。实际应用中, <br>

服务器返回的时间戳是客户的发送报文中填写的,用于客户 <br>

计算数据报的往返时间。 <br>

  <br>

  <br>

关于超时重传时间的计算和详细的使用可以看看书上的例子, <br>

这些都比较简单,就不再介绍了。 <br>

  <br>

3)并发udp服务器 <br>

以前写的udp服务器的例子都是迭代执行的,书上分两种情况 <br>

介绍了如何使用并发udp服务器。 <br>

  <br>

首先,如果udp服务器不由inetd启动,也就是说是一个单独的 <br>

服务器,那么在数据报到达,recvfrom返回以后,fork一个子 <br>

进程。父进程继续调用recvfrom,而子进程则创建一个新的套 <br>

接口,然后bind一个临时端口,然后在这个新的套接口上向客 <br>

户发送数据。 <br>

  <br>

其次,如果udp服务器由inetd启动,因为在inetd.conf中udp服务 <br>

一般指定为wait(为什么使用wait见书本Page284),这就导致 <br>

inetd停止在该套接口上,直到inetd的子进程中指,也就是该udp <br>

服务器终止。因此在inetd中,有数据到达以后,一般会fork一个 <br>

子进程来执行该udp服务器程序,这时udp服务器程序应该首先接收 <br>

该数据报,然后fork一个子进程,父进程exit,这样inetd就能够 <br>

继续执行接收数据报。然后udp服务器程序在fork的子进程中创建 <br>

新的套接口,在这个新的套接口上与客户端传输数据。 <br>

  <br>



  <br>

-- <br>

易朽的是生命,似那转瞬即谢的花朵;然而永存的,是对未来的渴望, <br>

是那生生世世传递下来的,不朽的,生的激情。每一朵勇敢开放的花, <br>

都是一个死亡唇边的微笑。 <br>

※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.69.205.23] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="54.htm">上一层</a>][<a href="96.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

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