socket的一些基本结构和用法
2012-11-25 20:40
387 查看
socket的一些基本结构和用法
一.socket的一些基本结构
1.32位的IP地址:
struct in_addr
{
unsigned long s_addr;
}
或者
typedef struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
2.TCP/IP所在的网际通信域使用的套接字地址格式:
struct sockaddr_in
{
short int sin_family; //表示所属地址簇,TCP/IP必须是AF_INET
unsigned short int sin_port; //表示端口号
struct in_addr sin_addr; //表示32位的IP地址,用in_addr结构表示
unsigned char sin_zero[8]; //表示全部填充0,保证和sockaddr大小相同
}
二.socket的一些辅助函数
1.字节序转换函数:
·htons : host to network byte order , short (unsigned) integer
·htonl : host to network byte order , long (unsigned) integer
·ntohs : network to host byte order , short (unsigned) integer
·ntohl : network to host byte order , long (unsigned) integer
记忆方法:
h表示host,n表示network,l表示long,s表示short
例如:
num = htons(Port_NUM);
表示将一个名叫Port_NUM的端口号转换成网络字节顺序并赋值给num变量
2.IP地址转换函数:
·inet_addr()
将一个用点分十进制表示的IP地址字符串转换成32位无符号整数。此整数已经是
网络字节顺序,无需再调用htonl()
·inet_ntoa()
将一个32位无符号整数转换成一个点分十进制表示的IP地址字符串,此函数接受
一个in_addr结构作为参数,将返回的字符串存储再一个static的缓冲区内,因
此,下次调用此函数时,将改变上次调用的结果。
struct in_addr结构还可以用以下3种方式赋值:
实现部分是定义的连合类型。如一个IP“10.14.25.90”
M1:
sin_addr.sunn_sun_bs_b1=10;
sin_addr.sunn_sun_bs_b1=14
sin_addr.sunn_sun_bs_b1=25;
sin_addr.sunn_sun_bs_b1=90;
M2:
sin_addr.sun.s_un_w.w_s_w1=(14<<8)|10;
sin_addr.sun.s_un_w.w_s_w1=(90<<8)|25;
M3:
sin_addr.s_un.s_addr=(90<<24)|(25<<16)|(14<<8)|10;
一.socket的一些基本结构
1.32位的IP地址:
struct in_addr
{
unsigned long s_addr;
}
或者
typedef struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
2.TCP/IP所在的网际通信域使用的套接字地址格式:
struct sockaddr_in
{
short int sin_family; //表示所属地址簇,TCP/IP必须是AF_INET
unsigned short int sin_port; //表示端口号
struct in_addr sin_addr; //表示32位的IP地址,用in_addr结构表示
unsigned char sin_zero[8]; //表示全部填充0,保证和sockaddr大小相同
}
二.socket的一些辅助函数
1.字节序转换函数:
·htons : host to network byte order , short (unsigned) integer
·htonl : host to network byte order , long (unsigned) integer
·ntohs : network to host byte order , short (unsigned) integer
·ntohl : network to host byte order , long (unsigned) integer
记忆方法:
h表示host,n表示network,l表示long,s表示short
例如:
num = htons(Port_NUM);
表示将一个名叫Port_NUM的端口号转换成网络字节顺序并赋值给num变量
2.IP地址转换函数:
·inet_addr()
将一个用点分十进制表示的IP地址字符串转换成32位无符号整数。此整数已经是
网络字节顺序,无需再调用htonl()
·inet_ntoa()
将一个32位无符号整数转换成一个点分十进制表示的IP地址字符串,此函数接受
一个in_addr结构作为参数,将返回的字符串存储再一个static的缓冲区内,因
此,下次调用此函数时,将改变上次调用的结果。
struct in_addr结构还可以用以下3种方式赋值:
实现部分是定义的连合类型。如一个IP“10.14.25.90”
M1:
sin_addr.sunn_sun_bs_b1=10;
sin_addr.sunn_sun_bs_b1=14
sin_addr.sunn_sun_bs_b1=25;
sin_addr.sunn_sun_bs_b1=90;
M2:
sin_addr.sun.s_un_w.w_s_w1=(14<<8)|10;
sin_addr.sun.s_un_w.w_s_w1=(90<<8)|25;
M3:
sin_addr.s_un.s_addr=(90<<24)|(25<<16)|(14<<8)|10;
相关文章推荐
- socket的一些基本结构
- 转:socket的一些基本结构
- Tensorflow的一些基本用法
- MongoDB基本介绍及一些用法
- ioctl在socket中的一些用法和示例
- vector和list的一些基本用法
- Python中集合(set)的基本操作以及一些常见的用法
- 管理下虚拟机如何? libvirt的一些基本用法
- ioctl在socket中的一些用法及示例
- Hive 中的复合数据结构简介以及一些函数的用法说明
- android中handler的一些总结以及使用(一)之handler的基本用法
- 第15节 html表格的基本结构、属性和用法
- JavaScript中的一些基本用法
- 关于setTimeout跟setinterval的一些基本的用法/小常识
- MongoDB基本介绍及一些用法
- 树结构中一些基本的术语
- jQuery一些基本用法
- MongoDB基本介绍及一些用法
- 管理下虚拟机如何? libvirt的一些基本用法
- ssh,scp的一些基本用法