Socket编程基础

1.网络字节序

大端字节序:高地址存放低字节,低地址存放高字节

小端字节序:高地址存放高字节,低地址存放低字节

 TCP/IP协议规定,网络数据流应采用大端字节序,即低地址存放高字节  

网络数据流在发送时都是从低地址开始发送,也就是先发的是低地址,后发的是高地址。

如上图所示,假如数据0x01234567 在某客户端需要发送到某服务器 

则在低地址存放的就是 01    高地址存放的就是67 也就是先发0x01 后发0x67  但是如果发送端 或者接受端为小端字节序 那么这组数据就会被解释为0x67...01  因此若主机是小端字节序需要做相应的转换才能保持 数据一致

为了使网络程序具有可移植性  使用同样的C代码在大端和小端主机都能运行  可以调用以下库函数进行转换

#include<arpa/inet.h>

htonl();  主机转网络   l 表示32位长整数  

htons();  主机转网络   s 表示16位短整数  

注:以上两个函数一般是在在编写socket网络通信时  一般是将本地的I端口(整型) 装换为计算机可识别的网络字节序

ntohl();   网络转主机  l 表示32位长整数  

ntohs();  网络转主机  s 表示16位短整数 

注:以上两个函数一般是在在编写socket网络通信时  一般是将将计算机中的网络字节序转换为我们可识别端口(整型 

IP地址的转换,需要调用如下库函数:

IP(字符串型的)---->网络字节序

int inet_pton(int family, const char *strptr, void *addrptr);    //将点分十进制的ip地址转化为用于网络传输的数值格式返回值:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1

网络字节序---->IP(字符串型的)

const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);    //将数值格式转化为点分十进制的ip地址格式返回值:若成功则为指向结构的指针,若出错则为NULL
以上函数应用实例可翻看博主之前的文章附链接icon-default.png?t=LA92https://blog.csdn.net/zhouzb96/article/details/121939891?spm=1001.2014.3001.5501

最后希望大家多多支持,多多指教,共同学习,共同提高,

你们的点赞与支持就是我继续写下去的动力,加油 !!

今天就先到这里吧!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值