泉州城乡住房建设厅网站,MEZZANINE wordpress,融创中国最新消息,怎么做卖卷网站CSAPP#xff1a;第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型 每个网络应用都是基于客户端-服务器模型。采用这个模型#xff0c;一个应用是由一个服务器进程和一个或者多个客户端进程组成。 客户端-服务器模型的基本… CSAPP第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型 每个网络应用都是基于客户端-服务器模型。采用这个模型一个应用是由一个服务器进程和一个或者多个客户端进程组成。 客户端-服务器模型的基本操作是事务。一个客户端-服务器事务由以下四步组成。 当一个客户端需要服务时它向服务器发送一个请求发起一个事务。服务器收到请求后解释它并以适当的方式操作它的资源。服务器给客户端发送一个响应并等待下一个请求。客户端收到响应并处理它。11.2 全球IP因特网 客户端和服务器通常运行在不同的主机上并且通过计算机网络的硬件和软件资源来通信。 全球IP因特网是最著名和最成功的互联网网络实现。每台因特网主机都运行实现TCP/IP协议的软件几乎每个现代计算机系统都支持这个协议。因特网的客户端和服务器混合使用套接字接口函数和unix I/O函数来进行通信。 11.3 套接字接口 套接字接口是一组函数它们和Unix I/O函数结合起来用以创建网络应用。 11.3.1 套接字的地址结构 因特网的套接字地址存放在类型sockaddr_in的16字节结构中。对于因特网的应用sin_family成员是AF_INETsin_port成员是一个16位的端口号sin_addr成员就是一个32位IP地址。IP地址和端口号总是以网络字序大端模式存放的。 1/* IP socket address structure */ 2struct sockaddr_in { 3 uint16_t sin_family; /* Protocol family (always AF_INET)*/ 4 uint16_t sin_port; /* Port number in network byte order */ 5 struct in_addr sin_addr; /* IP address in network byte order */ 6 unsigned char sin_zero[8]; /* Pad to sizeof(struct sockaddr) */ 7}; 8 9/* Generic socket address structure for(connect,bind and accept)*/10struct sockaddr{11 uint16_t sa_family; /* Protocol family */12 char sa_data[14]; /* address data */13}; 11.3.2 socket函数 客户端和服务器使用socket函数来创建一个套接字描述符。 1#include sys/types.h /* See NOTES */2#include sys/socket.h34int socket(int domain, int type, int protocol);//若成功返回套接字描述符失败返回-1 11.3.3 connect函数 客户端通过调用connect函数来建立和服务器的连接。connect函数试图与套接字地址为addr的服务器建立一个因特网连接其中addrlen是sizeof(sockaddr_in)。connect函数会阻塞一直到连接成功建立或者发生错误。 1#include sys/types.h /* See NOTES */2#include sys/socket.h34int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 11.3.4 bind函数 剩下的套接字函数--bind,listen和accept服务器用它们来和客户端建立连接。 1#include sys/types.h /* See NOTES */2#include sys/socket.h34int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); bind函数告诉内核 addr中的服务器套接字地址和套接字描述符sockfd联系起来11.3.5 listen函数 客户端是发生连接请求的主动实体。服务器是等待客户端的连接请求的被动实体。默认情况下内核会认为socket函数创建的描述符对应于主动套接字它存在于一个连接的客户端。服务器调用listen函数告诉内核描述符是被服务器使用而不是客户端。 1#include sys/types.h /* See NOTES */2#include sys/socket.h34int listen(int sockfd, int backlog); listen函数将sockfd从一个主动套接字转化为一个监听套接字该套接字可以接受来自客户端的连接请求.backlog参数暗示了内核在开始拒绝连接请求前队列中要排队的未完成的连接请求的数量。11.3.6 accept函数 服务器通过调用accept函数来等待来自客户端的连接请求。 1#include sys/types.h /* See NOTES */2#include sys/socket.h34int accept(int listenfd, struct sockaddr *addr, socklen_t *addrlen); accept函数等待来自客户端的连接请求到达侦听描述符listenfd然后在addr中填写客户端的套接字地址并返回一个已连接描述符这个描述符可以被用来利用Unix I/O函数与客户端通信。 转载于:https://www.cnblogs.com/ywx123/p/10371897.html