网络通信-大小端转换

socket 介绍

(1)、 是一个网络编程接口,是一种特殊的文件描述符,主要位于应用层与传输层之间。
(2)、Socket 种类:
        流式套接字(SOCK_STREAM ------------------>TCP
        数据报套接字(SOCK_DGRAM ------------------>UDP
        原始套接字(SOCK_RAW

字节序

大端序:高字节存在低位;
小端序:高字节存在高位;
( 网络字节序是大端 )

测试主机字节序

主机字节序:小端序, 已验证过了;根据 CPU 架构不同。
网络字节序:大端序, 一个值在网络传输需要将 小端转换才可以。
示例:
#include <stdio.h>
int main()
{
     short a = 0x1234; 
     char *p = (char *)&a;
 
    if((*p) == 0x12)
     {
         printf("大端!!!\n");
     }
     else
     {
         printf("小端!!!\n");
     }
     
    return 0;
}

IP 地址转换

(1). IP 地址转网络字节序
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        
        将点分十进制 IP 转化为大端序的二进制 IP
        int inet_aton(const char *cp, struct in_addr *inp);
        // 转换 ip 地址 cp 为网络字节序,存入 inp 所指向的结构体中
        // 成功返回非 0 ,失败返回 0
        功能:将点分十进制 IP 转化为二 进制 IP ,存储在 inp 中。
        参数:
                cp:点分十进制 IP
                inp:保存二进制 IP 的结构体
                typedef uint32_t in_addr_t;
                        struct in_addr { //存放 ip 的结构体
                        in_addr_t s_addr;
                };
        in_addr_t inet_addr(const char *cp);
        功能:将点分十进制 IP 转化为二进制 IP ,存储在 inp 中。
        参数:
                cp:点分十进制 IP
        返回值:
                保存二进制 IP 的结构体
        将大端序的二进制 IP 转化为点分十进制的 IP
        char *inet_ntoa(struct in_addr in);
        功能:将保存二进制 IP 结构体中保存的 IP 转化为一个点分十进制 IP
        参数:
                in:保存二进制 IP 的结构体
        返回值:
                点分十进制 IP
        
        使用:
        struct in_addr qwe;
        inet_aton("192.168.7.3",&qwe);
        struct in_addr qwe;
        qwe.s_addr=inet_addr("192.168.7.2"); // 将点分十进制 IP 转化为 2 进制 IP,存储在         qwe.s_addr
        struct in_addr qwe;
        char *ip=inet_ntoa(qwe);

端口号

(1). 端口号用于区分不同的网络进程。
(2). 端口号取值范围 1~65535 (16 )。
1 - 5000 :系统用;
5000 - 65535 用户使用;
(3). 端口号的转化
        #include <arpa/inet.h>
        uint16_t htons(uint16_t hostshort);
        功能:将用户字节序转化为网络字节序
        参数:
                hostshort:需要转化的数据
        返回值:
        转化之后的数据
        uint16_t ntohs(uint16_t netshort);
        功能:将网络字节序转化为用户字节序
        参数:
                netshort:需要转化的数据
        返回值:
        转化之后的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁静的海2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值