什么是Socket?

    Socket能够看成是用户进程与内核网络协议栈的接口(编程接口, 例如以下图所看到的), 其不仅能够用于本机进程间通信。能够用于网络上不同主机的进程间通信, 甚至还能够用于异构系统之间的通信。

 Socket编程实践(2) --Socket编程导引_网络字节序

IPv4套接口地址结构

    IPv4套接口地址结构通常也称为“网际套接字地址结构”。它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中

//TCP/IP地址结构
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port; //2字节
struct in_addr sin_addr; //4字节
char sin_zero[8]; //8字节
};


成员说明:

    sin_len:整个sockaddr_in结构体的长度。在4.3BSD-Reno版本号之前的第一个成员是sin_family.

    sin_family:指定该地址家族。对于IPv4来说必须设为AF_INET

    sin_port:端口

    sin_addr:IPv4的地址;

    sin_zero:暂不使用。一般将其设置为0

 

Linux结构(经常使用):

struct sockaddr_in
{
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order(网络字节序) */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr
{
uint32_t s_addr; /* address in network byte order */
};


通用地址结构

用来指定与套接字关联的地址(能够支持其它协议).

struct sockaddr
{
uint8_t sin_len;
sa_family_t sin_family;
char sa_data[14]; //14字节   
};


说明:

    sin_len:整个sockaddr结构体的长度

    sin_family:指定该地址家族

    sa_data:由sin_family决定它的形式。

 

网络字节序

1.大端字节序(Big Endian)

    最高有效位(MSB:Most Significant Bit)存储于最低内存地址处。最低有效位(LSB:Lowest Significant Bit)存储于最高内存地址处。

2.小端字节序(Little Endian)

    最高有效位(MSB:Most Significant Bit)存储于最高内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最低内存地址处。