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

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

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

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

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

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

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

时间: 2024-10-31 19:03:09

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

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

8.5 UDP回射客户程序:main函数 图8-7给出了UDP客户程序的main函数. 把服务器地址填入套接字地址结构9~12 把服务器的IP地址和端口号填入一个IPv4的套接字地址结构.该结构将传递给dg_cli函数,以指明数据报将发往何处. 13~14 创建一个UDP套接字,然后调用dg_cli.

UNIX网络编程:通用套接字选项

1. SO_BROADCAST 套接字选项 本选项开启或禁止进程发送广播消息的能力.只有数据报套接字支持广播,并且还必须是在支持广播消息的网络上(例如以太网,令牌环网等).我们不可能在点对点链路上进行广播,也不可能在基于连接的传输协议(例如TCP和SCTP)之上进行广播. 2. SO_DEBUG 套接字选项 本选项仅由TCP支持.当给一个TCP套接字开启本选项时,内核将为TCP在该套接字发送和接受的所有分组保留详细跟踪信息.这些信息保存在内核的某个环形缓冲区中,并可使用trpt程序进行检查. 3

《UNIX网络编程 卷1:套接字联网API(第3版)》——导读

**前言**本书面向的读者是那些希望自己编写的程序能使用称为套接字(socket)的API进行彼此通信的人.有些读者可能已经非常熟悉套接字了,因为这个模型几乎已经成了网络编程的同义词,但有些读者可能仍需要从头开始学习.本书想达到的目标是向大家提供网络编程指导.这些内容不仅适用于专业人士,也适用于初学者:不仅适用于维护已有代码,也适用于开发新的网络应用程序:此外,还适用于那些只是想了解一下自己系统中网络组件的工作原理的人. 书中的所有示例都是在Unix系统上测试通过的真实的.可运行的代码.但是,考

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.3 UDP回射服务器程序:main函数

8.3 UDP回射服务器程序:main函数 现在,我们用UDP重新编写第5章中简单的回射客户/服务器程序.我们的UDP客户程序和服务器程序依循图8-1中所示的函数调用流程.图8-2描述了它们所使用的函数,图8-3则给出了服务器程序的main函数. 创建UDP套接字,捆绑服务器的众所周知端口7~12 我们通过将socket函数的第二个参数指定为SOCK_DGRAM(IPv4协议中的数据报套接字)创建一个UDP套接字.正如TCP服务器程序的例子,用于bind的服务器IPv4地址被指定为INADDR_

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.16 小结

8.16 小结 把我们的TCP回射客户/服务器程序转换成UDP回射客户/服务器程序比较容易,然而TCP提供的许多功能也消失了:检测丢失的分组并重传,验证响应是否来自正确的对端,等等.到22.5节我们再回过头来讨论这个话题,并查看如何给UDP应用程序增加一些可靠性. UDP套接字可能产生异步错误,它们是在分组发送完一段时间后才报告的错误.TCP套接字总是给应用进程报告这些错误,但是UDP套接字必须已连接才能接收这些错误. UDP没有流量控制,这一点很容易演示证明.一般来说,这不成什么问题,因为许多

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.15 使用select函数的TCP和UDP回射服务器程序

8.15 使用select函数的TCP和UDP回射服务器程序 现在,我们把第5章中的并发TCP回射服务器程序与本章中的迭代UDP回射服务器程序组合成单个使用select来复用TCP和UDP套接字的服务器程序.图8-24是该程序的前半部分. 创建监听TCP套接字14~22 创建一个监听TCP套接字并捆绑服务器的众所周知端口,设置SO_REUSEADDR套接字选项以防该端口上已有连接存在. 创建UDP套接字23~29 还创建一个UDP套接字并捆绑与TCP套接字相同的端口.这里无需在调用bind之前设

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.2 recvfrom和sendto函数

8.2 recvfrom和sendto函数 这两个函数类似于标准的read和write函数,不过需要三个额外的参数. #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buff, size_t nby

socket-unix网络编程环境怎么配置?我买了套接字联网api和tcp/ip详解,但是书上的代码都不能运行.

问题描述 unix网络编程环境怎么配置?我买了套接字联网api和tcp/ip详解,但是书上的代码都不能运行. 就下面这个代码,运行提示没有unp.h,找了个unp.h,但是还是提示什么各种数据类型重复定义.我到现在觉得是不是这本书写错了. #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if

《UNIX网络编程 卷1:套接字联网API(第3版)》——1.8 BSD网络支持历史

1.8 BSD网络支持历史 套接字API起源于1983年发行的4.2BSD操作系统.图1-15展示了各种BSD发行版本的发展史,并注明了TCP/IP的主要发展历程.1990年面世的4.3BSD Reno发行版本随着OSI协议进入BSD内核而对套接字API做了少量的改动. 图1-15中从4.2BSD往下到4.4BSD的通路展示了源自Berkeley计算机系统研究组(Computer Systems Research Group,CSRG)的各个版本,它们要求获取者已拥有Unix的源代码许可权.然而