荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: everlove.bbs@bbs.shuoshuo.net (我是如此厌倦), 信区: Linux
标  题: unp第八章学习体会
发信站: 寂寞森林 (Mon Sep 23 10:43:01 2002)
转信站: SZUBBS!news2.happynet.org!news.happynet.org!LonelyWood


发信人: clown (梧桐叶), 信区: UNP
标  题: unp第八章学习体会
发信站: UNIX编程 (2001年09月03日20:21:16 星期一), 站内信件

udp协议大家可能用的不多,因此比较陌生。不过最近由于
工作需要,做的几个以及即将可能要做的东西都与udp相关,
在开始使用的时候,用起来总是不大顺手,因此下面主要
介绍使用udp的时候要注意的问题。

udp的优点就是消耗的系统资源小,适合于小量数据的通信。
与tcp相比,它有以下的缺点,其实这些缺点的主要原因就是
因为它是无连接的,这一点也正是它的优点。:P
1)数据报的丢失
在程序中调用recvfrom的时候,如果数据报丢失,很可能进程
就阻塞在这里了,唯有^C或者杀死进程才能结束。因此程序中
一定要注意这个问题,最简单的方法就是调用recvfrom的时候
设置定时器。
2)一定要验证接收到的响应
udp是很不安全的,只要知道了客户端的ip地址和临时端口,任何
进程都可以向该客户发送数据。我专门测试了这种情况,客户端A
调用select函数决定执行标准输入并sendto还是recvfrom函数。
我首先从客户端发送一个数据到服务器,从服务器得到客户端的
ip和port,然后杀死服务器,接着在另一个终端运行该客户程序B
(当然对ip和port进行了修改)向客户端A发送数据,结果客户端A
的recvfrom函数可以正常打印出来。
由此说明,对于udp服务器和客户端,对于收到的数据一定要进行验证!
3)异步错误处理
在通信过程中,如果udp服务器死掉,那么udp客户端是不会得到通知的(实际
上是udp协议栈是会得到错误通知的,例如端口不可达,但是他没有通知
我们的应用程序),只有客户端使用了connect函数以后,才会得到这些
错误通知。
4)udp流量控制
udp没有流量控制,因此如果服务器和客户端的通信速度不一样,而且又没有
握手协商的话,一定会造成数据报的丢失(发送速度快于接收速度)。

最后提及一下udp中使用connect函数的情况。
已连接udp套接口与未连接udp套接口比较,有三个不同点。
1)不能使用sendto而要使用send,因为不能再给输出操作指定目的ip和port。
2)不能使用recvfrom而要使用recv。
3)异步错误会返回给进程。
4)使用connect以后,只能与唯一的对方进行通信,如果要与另外的服务器
通信,则必须再次调用connect函数。
--
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.1.61]

--
我站在夜的尽头
窗外的雨悄悄坠落





※ 来源:.寂寞森林 http://bbs.shuoshuo.net  ◆ FROM: 211.161.158.231


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店