C++ 网络编程学习(二)

字节序

常见:

大端:Big endian 高字节存储在低地址

小端:Little endian 低序字节存储在低地址

例如存储:0x01020304

内存地址4000400140024003
大端01020304
小端04030201

 

网络字节顺序采用大端

字节序转换函数

#include<arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t htonl(uint32_t netlong);
uint16_t htons(uint16_t netshort);

h表示host,n表示network,s表示short,l表示long

Socket地址结构

IPv4套接字地址结构

struct sockaddr_in{

    uint8_t sin_len;             //整个sockaddr_in结构体的长度
    sa_family_t sin_family;      //指定地址家族是 IPv4 AF_INET或者别的  
    in_port_t sin_port;          //端口,65535,16位无符号整数
    struct in_addr sin_addr;     //地址.32位无符号整数
    char sin_zero[8];            //暂不使用,一般设置为0

}

通用地址结构

struct sockaddr{
    uint8_t sin_len;             //整个sockaddr结构体的长度
    sa_family_t sin_family;      //指定地址家族是 IPv4 AF_INET或者别的  
    char sa_data[14];            //由sin_family决定它的形式
}

地址转换函数

#include <netinet/in.h>
#include <arpa/inet.h>

int inet_aton(const char *cp,struct in_addr *inp);
in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值