文章目录
客户机-服务器模型
一个简单的客户机-服务器模型如下图所示。
客户机需要某个数据或某项服务时,向服务器发送请求,服务器对该请求作出响应,向客户机提供它想要的东西。
一个服务器可以同时对多个客户机作出响应。
客户机和服务器都是以进程(不是机器)为单位的,即客户机进程、服务器进程。
套接字地址
套接字地址主要有三个重要信息:地址族(表示哪种套接字)、IP地址、端口号。
不同类型的套接字定义了不同的结构。
IPV4套接字
/* IPV4套接字地址,32bit值. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
/* 描述IPV4的套接字地址格式 */
struct sockaddr_in
{
sa_family_t sin_family; /* 16-bit */
in_port_t sin_port; /* 端口号 16-bit*/
struct in_addr sin_addr; /* Internet address. 32-bit */
/* 这里仅仅用作占位符,不做实际用处 */
unsigned char sin_zero[8];
};
IPV6套接字
struct sockaddr_in6
{
sa_family_t sin6_family; /* 16-bit */
in_port_t sin6_port; /* 传输端口号 # 16-bit */
uint32_t sin6_flowinfo; /* IPv6流控信息 32-bit*/
struct in6_addr sin6_addr; /* IPv6地址128-bit */
uint32_t sin6_scope_id; /* IPv6域ID 32-bit */
};
本地套接字
struct sockaddr_un {
unsigned short sun_family; /* 固定为 AF_LOCAL */
char sun_path[