- Unix套接字教程
- Unix套接字 - 首页
- Unix套接字 - 什么是套接字?
- Unix套接字 - 网络地址
- Unix套接字 - 网络主机名
- Unix套接字 - 客户端-服务器模型
- Unix套接字 - 结构
- Unix套接字 - 端口和服务
- Unix套接字 - 网络字节序
- Unix套接字 - IP地址函数
- Unix套接字 - 核心函数
- Unix套接字 - 辅助函数
- Unix套接字 - 服务器示例
- Unix套接字 - 客户端示例
- Unix套接字 - 总结
- Unix套接字有用资源
- Unix套接字 - 快速指南
- Unix套接字 - 有用资源
- Unix套接字 - 讨论
Unix套接字 - 结构
Unix套接字编程中使用了各种结构来保存有关地址、端口和其他信息的信息。大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。本章中定义的结构与互联网协议族相关。
sockaddr
第一个结构是sockaddr,它保存套接字信息:
struct sockaddr { unsigned short sa_family; char sa_data[14]; };
这是一个通用的套接字地址结构,它将被传递到大多数套接字函数调用中。下表提供了成员字段的描述:
属性 | 值 | 描述 |
---|---|---|
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它表示一个地址族。在大多数基于互联网的应用程序中,我们使用AF_INET。 |
sa_data | 协议特定的地址 | 14个字节的协议特定地址的内容根据地址类型进行解释。对于互联网族,我们将使用端口号IP地址,它由下面定义的sockaddr_in结构表示。 |
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 |
它表示一个地址族。在大多数基于互联网的应用程序中,我们使用AF_INET。 |
sin_port | 服务端口 | 一个以网络字节序表示的16位端口号。 |
sin_addr | IP地址 | 一个以网络字节序表示的32位IP地址。 |
sin_zero | 未使用 | 只需将此值设置为NULL,因为它没有被使用。 |
in_addr
此结构仅在上述结构中用作结构字段,并保存32位netid/hostid。
struct in_addr { unsigned long s_addr; };
以下是成员字段的描述:
属性 | 值 | 描述 |
---|---|---|
s_addr | 服务端口 | 一个以网络字节序表示的32位IP地址。 |
hostent
此结构用于保存与主机相关的信息。
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_aliases | TI | 它保存主机名别名列表。 |
h_addrtype | AF_INET | 它包含地址族,对于基于互联网的应用程序,它将始终为AF_INET。 |
h_length | 4 | 它保存IP地址的长度,对于互联网地址为4。 |
h_addr_list | in_addr | 对于互联网地址,指针数组h_addr_list[0]、h_addr_list[1]等等指向结构in_addr。 |
注意 - h_addr 定义为 h_addr_list[0] 以保持向后兼容性。
servent
此特定结构用于保存与服务和关联端口相关的信息。
struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; };
以下是成员字段的描述:
属性 | 值 | 描述 |
---|---|---|
s_name | http | 这是服务的正式名称。例如,SMTP、FTP、POP3等。 |
s_aliases | 别名 | 它保存服务别名列表。大多数情况下,这将设置为NULL。 |
s_port | 80 | 它将具有关联的端口号。例如,对于HTTP,这将是80。 |
s_proto |
TCP UDP |
它设置为使用的协议。互联网服务是使用TCP或UDP提供的。 |
关于套接字结构的提示
套接字地址结构是每个网络程序不可或缺的一部分。我们分配它们,填写它们,并将指向它们的指针传递给各种套接字函数。有时我们将这些结构之一的指针传递给套接字函数,它会填写内容。
我们总是通过引用传递这些结构(即,我们传递指向结构的指针,而不是结构本身),并且我们总是将结构的大小作为另一个参数传递。
当套接字函数填写结构时,长度也通过引用传递,以便其值可以被函数更新。我们称这些值为结果参数。
始终使用memset()或bzero()函数将结构变量设置为NULL(即'\0'),否则你的结构中可能会出现意外的垃圾值。
广告