Socket编程实践 --Socket编程导引

Posted zhchoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket编程实践 --Socket编程导引相关的知识,希望对你有一定的参考价值。

什么是Socket?

    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)存储于最低内存地址处。


以上是关于Socket编程实践 --Socket编程导引的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的socket编程实践

socket网络编程实践要点

linux系统socket通信编程实践

Socket编程实践 --Select-I/O复用

网络协议 10 - Socket 编程:实践是检验真理的唯一标准

iOS网络编程实践--NSStream实现TCP Socket iPhone客户端