嵌入式Linux网络编程(一)

2019-07-12 20:03发布

网络协议 国际标准组织(ISO)制定了OSI模型,把网络通信分为7层。而TCP/IP将网络通信分为4层:应用层,传输层,网络互连层,网络接口层。 Socket接口是TCP/IP网络的API,定义了许多函数和例子。 1.网络地址: 网络地址的表示主要通过两个重要的数据类型,结构体:sockaddr和sockaddr_in。 (1)结构体sockaddr struct sockaddr{           unsigned short sa_family;                  /*地址族,AF_xxx*/           char sa_data[14];                              /*14字节的协议地址*/ }; sa_family:   一般是AF_INET,代表Internet(TCP/IP)地址族的IPV4协议。 sa_data:     包含了一些远程计算机的IP地址,端口号和套接字的数目。 (2)结构体sockaddr_in struct sockaddr_in{                               short int sin_family;                              /*地址族*/                               unsigned short int sin_port;                 /*端口号*/                               struct in_addr sin_addr;                        /*IP地址*/                              unsigned char sin_zero[8];                    /*填充0以保持大小*/ } sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度。 2.IP地址转换 在网络中IP都是点分十进制的格式,如"192.168.0.1",而在struct in_addr结构中用的是32位的IP,上面那个32位IP转换可以用到下面两个函数: int inet_aton(const char *cp,struct in_addr *inp) char *inet_ntoa(struct in_addr in) 第一个函数表示将“a.b.c.d”的IP转换成32位的IP,存储在inp指针中;第二个函数将32位IP转换成“a.b.c.d”的格式。