网络编程

CS编程模型

sequenceDiagram    客户端 ->> 服务端: 请求    服务端 ->> 服务端: 处理资源    服务端 --> 客户端: 响应

网络

全球IP因特网

IP地址

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

因特网域名

因特网连接

套接字接口

/*通用的socket地址结构 (用于connect, bind, 和accept) */ struct sockaddr {     unsigned short sa_family;    /* 协议家族 */     char sa_data[14];    /* 地址数据 */ }; /* 因特网形式的socket地址结构 */ struct sockaddr_in {     unsigned short sin_family; /* 地址家族,一般都是AF_INET */     unsigned short sin_port; /* 网络字节顺序(大端表示法)的端口号 */     struct in_addr sin_addr; /* 网络字节顺序(大端表示法)的IP地址 */     unsigned char sin_zero[8]; /* 对sizeof(struct sockaddr)的填补 */ };

socket 函数

#include <sys/types.h>#include <sys/socket.h>int socket(int domain,int type,int protocol); // 使用此函数创建一个套接字描述符int connect(int clientfd,const struct socketaddr *addr,socklen_t addrlen); // 建立与服务端的连接int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen); // 服务器用来绑定fd与网络地址int listen(int sockfd,int backlog); // 服务器将socketfd转换为一个监听socketfd 从而接受客户端的连接请求int accept(int listenfd,struct sockaddr *addr,int *addrlen); // 返回已连接描述符

为什么需要区分监听描述符与已连接描述符 答案是为了并发 服务器端可以通过多进程或者多线程的方式处理多个已连接描述符 从而对多个用户提供服务

主机和服务的转换

#include <sys/types.h>#include <sys/socket.h>#include <netdb.h>int getaddrinfo(const char *host,const char *service,    const struct addrinfo *hints,    struct addrinfo **result); // 将主机名端口号等信息转换为套接字地址结构void freeaddrinfo(struct addrinfo *result);const char *gai_strerror(int errorcode);int getnameinfo(const struct sockaddr *sa,socklen_t salen,    char *host,size_ hostlen,    char *service,size_t servlen,int flags);

WEB服务器

WEB内容

批注 2019-07-20 091829