linux基础知识总结 linux编程基础( 二 )


struct sockaddr_in{short int sa_family; /*地址族*/unsigned short int sin_port; /*端口号*/struct in_addr sin_addr; /*IP地址*/unsigned char sin_zero[8]; /*填充0 以保持与struct sockaddr同样大小*/};2.4.1 网络地址的转换
IP地址通常用数字加点(如192.168.1.a)表示 , 而在struct in_addr中使用的式32位整数表示 。因此 , Linux提供如下函数进行两者之间的转换:
inet_aton()函数:所需要头文件#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>函数格式:
int inet_aton(const char *cp, struct in_addr *inp);函数功能:将a.b.c.d字符串形式的IP地址转换成32位网络序号IP地址;*cp:存放字符串形式的IP地址的指针*inp:存放32位的网络序号IP地址
返回值:转换成功 , 返回非0 , 否则返回0;
inet_ntoa()函数:客户机端:所需要头文件#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>函数格式:
char *inet_ntoa(struct in_addr in);函数功能:将32位网络序号IP地址转换成a.b.c.d字符串形式的IP地址;in:Internet主机地址的结构
返回值:转换成功 , 返回一个字符指针 , 否则返回NULL;
2.4 字节序
不同的CPU采用对变量的字节存储顺序可能不同 。
常用的X86结构是小端模式 , 很多的ARM , DSP都为小端模式 , 即内存的低地址存储数据的低字节 , 高地址存储数据的高字节 。
而KEIL C51则为大端模式 , 内存的高地址存储数据的低字节 , 低地址存储数据高字节 。
对于网络传输来说 , 数据顺序必须是一致的 , 网络字节顺序采用大端字节序方式 。
下面是四个常用的转换函数:
主机转网络:
htons()函数:
所需要头文件:
#include <netinet/in.h>函数格式:
unsigned short int htons(unsigned short int hostshort)函数功能:将参数指定的16位主机(host)字符顺序转换成网络(net)字符顺序;hostshort:待转换的16位主机字符顺序数返回值:返回对应的网络字符顺序数;
htonl()函数:所需要头文件:#include <netinet/in.h>函数格式:
unsigned long int htons(unsigned long int hostlong)函数功能:将参数指定的32位主机(host)字符顺序转换成网络(net)字符顺序;hostlong:待转换的32位主机字符顺序数返回值:返回对应的网络字符顺序数;
网络转主机:
ntohs()函数:所需要头文件:#include <netinet/in.h>函数格式:
unsigned short int ntohs(unsigned short int netshort)函数功能:将参数指定的16位网络(net)字符顺序转换成主机(host)字符顺序;netshort:待转换的16位网络字符顺序数
返回值:返回对应的主机字符顺序数;
ntohl()函数:所需要头文件:#include <netinet/in.h>函数格式:
unsigned long int ntohl(unsigned long int netlong)函数功能:将参数指定的32位网络(net)字符顺序转换成主机(host)字符顺序;netshort:待转换的32位网络字符顺序数返回值:返回对应的主机字符顺序数;


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: