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

📄 69.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="70.htm">下一篇</a>]
<hr><p align="left"><small>发信人: clown (梧桐叶), 信区: UNP <br>

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

发信站: UNIX编程 (2001年09月03日20:21:16 星期一), 站内信件 <br>

  <br>

udp协议大家可能用的不多,因此比较陌生。不过最近由于 <br>

工作需要,做的几个以及即将可能要做的东西都与udp相关, <br>

在开始使用的时候,用起来总是不大顺手,因此下面主要 <br>

介绍使用udp的时候要注意的问题。 <br>

  <br>

udp的优点就是消耗的系统资源小,适合于小量数据的通信。 <br>

与tcp相比,它有以下的缺点,其实这些缺点的主要原因就是 <br>

因为它是无连接的,这一点也正是它的优点。:P <br>

1)数据报的丢失 <br>

在程序中调用recvfrom的时候,如果数据报丢失,很可能进程 <br>

就阻塞在这里了,唯有^C或者杀死进程才能结束。因此程序中 <br>

一定要注意这个问题,最简单的方法就是调用recvfrom的时候 <br>

设置定时器。 <br>

2)一定要验证接收到的响应 <br>

udp是很不安全的,只要知道了客户端的ip地址和临时端口,任何 <br>

进程都可以向该客户发送数据。我专门测试了这种情况,客户端A <br>

调用select函数决定执行标准输入并sendto还是recvfrom函数。 <br>

我首先从客户端发送一个数据到服务器,从服务器得到客户端的 <br>

ip和port,然后杀死服务器,接着在另一个终端运行该客户程序B <br>



(当然对ip和port进行了修改)向客户端A发送数据,结果客户端A <br>

的recvfrom函数可以正常打印出来。 <br>

由此说明,对于udp服务器和客户端,对于收到的数据一定要进行验证! <br>

3)异步错误处理 <br>

在通信过程中,如果udp服务器死掉,那么udp客户端是不会得到通知的(实际 <br>

上是udp协议栈是会得到错误通知的,例如端口不可达,但是他没有通知 <br>

我们的应用程序),只有客户端使用了connect函数以后,才会得到这些 <br>

错误通知。 <br>

4)udp流量控制 <br>

udp没有流量控制,因此如果服务器和客户端的通信速度不一样,而且又没有 <br>

握手协商的话,一定会造成数据报的丢失(发送速度快于接收速度)。 <br>

  <br>

最后提及一下udp中使用connect函数的情况。 <br>

已连接udp套接口与未连接udp套接口比较,有三个不同点。 <br>

1)不能使用sendto而要使用send,因为不能再给输出操作指定目的ip和port。 <br>

2)不能使用recvfrom而要使用recv。 <br>

3)异步错误会返回给进程。 <br>

4)使用connect以后,只能与唯一的对方进行通信,如果要与另外的服务器 <br>

通信,则必须再次调用connect函数。 <br>

-- <br>

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

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="54.htm">上一层</a>][<a href="70.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 + -