- Unix 套接字教程
- Unix Socket - 主页
- Unix 套接字 - 什么是套接字?
- Unix 套接字 - 网络地址
- Unix Socket - 网络主机名
- Unix Socket - 客户端服务器模型
- Unix Socket - 结构
- Unix Socket - 端口和服务
- Unix Socket - 网络字节顺序
- Unix Socket - IP 地址函数
- Unix Socket - 核心功能
- Unix Socket - 辅助函数
- Unix Socket - 服务器示例
- Unix Socket - 客户端示例
- Unix Socket - 总结
- Unix 套接字有用资源
- Unix 套接字 - 快速指南
- Unix Socket - 有用资源
- Unix Socket - 讨论
Unix Socket - 结构
Unix 套接字编程中使用各种结构来保存有关地址和端口的信息以及其他信息。大多数套接字函数需要一个指向套接字地址结构的指针作为参数。本章定义的结构与互联网协议族相关。
套接字地址
第一个结构是sockaddr,它保存套接字信息 -
struct sockaddr { unsigned short sa_family; char sa_data[14]; };
这是一个通用的套接字地址结构,大多数套接字函数调用都会传递该结构。下表提供了成员字段的描述 -
属性 | 价值观 | 描述 |
---|---|---|
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它代表一个地址族。在大多数基于 Internet 的应用程序中,我们使用 AF_INET。 |
萨数据 | 协议特定地址 | 14字节协议特定地址的内容根据地址类型进行解释。对于Internet家族,我们将使用端口号IP地址,它由下面定义的sockaddr_in结构体表示。 |
套接字地址在
帮助您引用套接字元素的第二个结构如下 -
struct sockaddr_in { short int sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; };
这是成员字段的描述 -
属性 | 价值观 | 描述 |
---|---|---|
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它代表一个地址族。在大多数基于 Internet 的应用程序中,我们使用 AF_INET。 |
罪恶端口 | 服务端口 | 网络字节顺序中的 16 位端口号。 |
罪名地址 | IP地址 | 网络字节顺序的 32 位 IP 地址。 |
罪恶零 | 不曾用过 | 您只需将此值设置为 NULL,因为该值未被使用。 |
在地址中
该结构仅在上述结构中用作结构字段并保存32位netid/hostid。
struct in_addr { unsigned long s_addr; };
这是成员字段的描述 -
属性 | 价值观 | 描述 |
---|---|---|
s_地址 | 服务端口 | 网络字节顺序的 32 位 IP 地址。 |
主机
该结构体用于保存与主机相关的信息。
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list #define h_addr h_addr_list[0] };
这是成员字段的描述 -
属性 | 价值观 | 描述 |
---|---|---|
h_name | ti.com 等 | 这是主持人的正式名称。例如,tutorialspoint.com、google.com 等。 |
h_别名 | TI | 它包含主机名别名列表。 |
h_地址类型 | AF_INET | 它包含地址族,如果是基于 Internet 的应用程序,它将始终是 AF_INET。 |
h_长度 | 4 | 它保存IP地址的长度,对于Internet地址来说是4。 |
h_地址列表 | 输入地址 | 对于互联网地址,指针数组 h_addr_list[0]、h_addr_list[1] 等指向结构 in_addr。 |
注意- h_addr 被定义为 h_addr_list[0] 以保持向后兼容性。
仆人
这个特定的结构用于保存与服务和关联端口相关的信息。
struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; };
这是成员字段的描述 -
属性 | 价值观 | 描述 |
---|---|---|
名字 | http | 这是该服务的正式名称。例如,SMTP、FTP POP3 等。 |
s_别名 | 别名 | 它保存服务别名列表。大多数时候这将被设置为 NULL。 |
运动 | 80 | 它将具有关联的端口号。例如,对于 HTTP,这将为 80。 |
s_proto |
传输控制协议 UDP协议 |
它被设置为所使用的协议。Internet 服务使用 TCP 或 UDP 提供。 |
套接字结构的技巧
套接字地址结构是每个网络程序不可或缺的一部分。我们分配它们,填充它们,并将指向它们的指针传递给各种套接字函数。有时,我们将指向这些结构之一的指针传递给套接字函数,它会填充内容。
我们总是通过引用传递这些结构(即,我们传递指向结构的指针,而不是结构本身),并且我们总是将结构的大小作为另一个参数传递。
当套接字函数填充结构时,长度也通过引用传递,以便函数可以更新其值。我们称这些为价值-结果论证。
始终通过使用 bzero() 函数的 memset() 将结构变量设置为 NULL(即“\0”),否则可能会在结构中获得意外的垃圾值。