信息和其他信息。大多数socket函数需要一个指向一个socket地址结构作为参数。如下定义的结构与互联网协议的家族。
第一个结构是struct 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 | Protocol Specific Address | 根据地址的类型解释14字节的协议特定地址的内容。互联网的家庭族中我们将使用端口号的IP地址为bysockaddr_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 | Service Port | 网络字节序的一个16位端口号。 |
sin_addr | IP Address | 网络字节序的一个32位地址。 |
sin_zero | Not Used | 设定为NULL(不被使用) |
下一个结构仅用于上述结构中的一个结构域,并拥有32位的netid/主机ID。
struct in_addr { unsigned long s_addr;}; |
这里是成员字段的描述:
属性 | 值 | 描述 |
s_addr | service port | 网络字节序的一个32位地址。 |
还有一个更重要的结构。这个结构是用来保持主机相关的信息。
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 etc | 主机的官方名称。例如tutorialspoint.com,Google.com等。 |
h_aliases | TI | 列出主机别名。 |
h_addrtype | AF_INET | 基于互联网的包含地址和家庭族协议的应用程序,它将永远为af_inet |
h_length | 4 | 保持4字节的互联网地址的地址长度。 |
h_addr_list | in_addr | 互联网地址的指针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;}; |
这里是成员字段的描述:
属性 | 值 | 描述 |
s_name | http | 这是官方的服务名称。例如SMTP,FTP POP3等。 |
s_aliases | ALIAS | 其将存放服务别名的列表。大部分的时间将被设置为NULL。 |
s_port | 80 | 这将有相关联的端口号。例如HTTP,则为80。 |
s_proto | TCP UDP | 这将被设置为所使用的协议。使用TCP或UDP网络服务。 |
套接字结构上的提示:
套接字地址结构是每一个网络程序的一个组成部分。我们分配填补在指针传递给它们的各种套接字函数。有时候,我们通过一个这样的结构指针的socket函数,它填补了内容。
作为另一个参数。
参数。
请务必将结构体变量设置为NULL(即'\0')用memset()的bzero()函数,否则在你的结构,它可能会得到意想不到的垃圾值。