开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数

简介: 我们的客户尚未请求内核给它的套接字指派一个临时端口。(对于TCP客户而言,我们说过connect调用正是这种指派发生之处。)对于一个UDP套接字,如果其进程首次调用sendto时它没有绑定一个本地端口,那么内核就在此时为它选择一个临时端口。跟TCP一样,客户可以显式地调用bind,不过很少这样做。
+关注继续查看

本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第8章,第8.6节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

8.6 UDP回射客户程序:dg_cli函数

图8-8给出了dg_cli函数,它执行客户的大部分处理工作。
screenshot

7~12 客户处理循环中有四个步骤:使用fgets从标准输入读入一个文本行,使用sendto将该文本行发送给服务器,使用recvfrom读回服务器的回射,使用fputs把回射的文本行显示到标准输出。

我们的客户尚未请求内核给它的套接字指派一个临时端口。(对于TCP客户而言,我们说过connect调用正是这种指派发生之处。)对于一个UDP套接字,如果其进程首次调用sendto时它没有绑定一个本地端口,那么内核就在此时为它选择一个临时端口。跟TCP一样,客户可以显式地调用bind,不过很少这样做。

注意,调用recvfrom指定的第五和第六个参数是空指针。这告知内核我们并不关心应答数据报由谁发送。这样做存在一个风险:任何进程不论是在与本客户进程相同的主机上还是在不同的主机上,都可以向本客户的IP地址和端口发送数据报,这些数据报将被客户读入并被认为是服务器的应答。我们将在8.8节解决这个问题。

与服务器的dg_echo函数一样,客户的dg_cli函数也是协议无关的,不过客户的main函数是协议相关的。main函数分配并初始化一个某个协议类型的套接字地址结构,并把指向该结构的指针及该结构的大小传递给dg_cli。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Linux网络编程必备的POSIX API的细节
Linux网络编程必备的POSIX API的细节
0 0
【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )
【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )
0 0
【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )
【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )
0 0
【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介(二)
【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介(二)
0 0
【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介(一)
【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介(一)
0 0
【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
0 0
带你读《Python网络编程(原书第2版)》之三:API和意图驱动网络
本书是一本实用型的基础技术实践工具书,技术性较强,如果你想快速了解计算机网络管理、网络安全、自动化运维、Python Web搭建、网络测试相关的知识,本书很适合你。本书涵盖的知识点主要是网络运维相关技术,在学习完所有的章节之后,读者能对网络的管理有初步的了解。每个章节的后面部分都是有一定难度的扩展资源,循序渐进,帮助读者提升网络运维能力。
110 0
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.10 UDP程序例子小结
一般来说,客户的IP地址和端口号都由内核自动选择,尽管我们提到过,客户也可以调用bind指定它们。在客户的这两个值由内核选择的情形下我们也提到过,客户的临时端口是在第一次调用sendto时一次性选定,不能改变;然而客户的IP地址却可以随客户发送的每个UDP数据报而变动(假设客户没有捆绑一个具体的IP地址到其套接字上)。
897 0
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.9 服务器进程未运行
我们下一个要检查的情形是在不启动服务器的前提下启动客户。如果我们这么做后在客户上键入一行文本,那么什么也不发生。客户永远阻塞于它的recvfrom调用,等待一个永不出现的服务器应答。然而这是一个很好的例子,它要求我们更多地了解底层协议以理解网络应用进程将发生什么。
1346 0
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.8 验证接收到的响应
我们的解决办法是修改图8-8中的recvfrom调用以返回数据报发送者的IP地址和端口号,保留来自数据报所发往服务器的应答,而忽略任何其他数据报。然而这样做照样存在一些缺陷,我们马上就会看到。
1175 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
CUDA Math API
立即下载
阿里云 API 精选手册(Alibaba Cloud API Playbook)
立即下载
重保场景及API安全指南
立即下载