前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀结束. IPv4套接口地址结构 IPv4套接口地址结构通常也称为"网际套接口地址结构",它以"sockaddr_in"命名,定义在头文件<netinet/in.h>中.其POSIX定义如下: /* sockaddr_in */ struct in_addr…
编写一个完整的TCP客户和服务器程序所需要的基本套接口函数: 1.socket函数(客户端.服务器端都必须调用) 参数family指明协议族(family),该参数也往往被称为协议域(domain).所以有的书上声明如下: 而且对于socket函数第一个参数,在不同书籍上可能会看到不同前缀的取值常量列表,如下两图所示: AF_xxx与PF_xxx: AF_前缀表地址族,PF_前缀表示协议族.历史上曾有这样的想法:单个协议族可以支持多个地址族,PF_值用来创建套接口,而AF_值用于套接口地址结构.…
概述 SCTP是一个较新的传输协议,于2000年在IETF得到标准化(TCP是在1981年标准化的).它最初是为满足不断增长的IP电话市场设计的:具体地说,就是穿越因特网传输电话信令. SCTP是一个可靠的面向消息的协议,在端点之间提供多个流,并为多宿提供传输级支持. 尽管SCTP和TCP之间存在一些本质性的差别,然而SCTP的一到一(one-to-one)接口与TCP提供的应用接口非常接近.这一点允许轻而易举地移植应用程序,不过没法使用SCTP的某些高级特性.SCTP的一到多(one-to-m…
概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统).NFS(网络文件系统)和SNMP(简单网络管理协议). 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须作为参数指定目的地(即服务器)的地址.类似地,服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据到达.recvfrom将与所接收的数据报一道返回客户的协议地址,因此服务器可以把响应发送给正确的客户. rec…
概述 在名字和数值地址间进行转换的函数: gethostbyname和gethostbyaddr:在主机名字与IPv4地址之间进行转换.仅仅支持IPv4. getservbyname和getservbyport:在服务名字和端口号之间进行转换. getaddrinfo和getnameinfo:用于主机名字和IP地址之间以及服务名字和端口号之间的转换.(这两个函数是协议无关的) 域名系统 域名系统(Domain Name System,简称DNS)主要用于主机名字和IP地址之间的映射. 资源记录…
概述 UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同.UNIX域协议可视为进程间通信(IPC)方法之一. UNIX域提供两类套接口:字节流套接口(类似TCP)和数据报套接口(类似UDP). 使用UNIX域套接口的理由有3个: 在源自Berkeley的实现中,UNIX域套接口往往比通信两端位于同一主机的TCP套接口快出一倍. UNIX域套接口可用于在同一个主机上的不同进程间传递描述字…
这两个函数是最通用的I/O函数.实际上我们可以把所有read.readv.recv和recvfrom调用替换成recvmsg调用.类似地,各种输出函数调用也可以替换成sendmsg调用. #include <sys/socket.h> ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags); 返回:读入或写出字节数…
地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址. 1.inet_aton.inet_addr.inet_ntoa inet_aton.inet_addr和inet_ntoa在点分十进制数串(例如,"206.168.112.96")与它的32位网络字节序二进制值间转换IPv4地址. #include <arpa/inet.h> int inet_aton(const char *strptr, st…
会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要的部分. http://blog.csdn.net/yusiguyuan/article/details/11760187 UNIX网络编程---简介…
认知套接口编程接口 理解原始套接口(raw socket)的概念   值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙,用于指出应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket). UNIX网络编程中所说的套接口编程接口是应用层到传输层的接口.UNIX网络编程的焦点是:如何使用套接口编写使用TCP或UDP的网络应用程序.…