socket套接字(字节序、地址转换)
什么是socket:
socket可以看成是用户进程与内核网络协议栈的编程接口。
socket不仅可以用于本机的进程间通信,还可以用于网络上
不同主机之间的进程通信。
IPv4套接口地址结构
struct sockaddr_in{
uint8_t sin_len; //整个sockaddr_in结构体的长度
sa_family_t sin_family; //指定地址家族(不仅可用于tcp ip也可用于UNIX域协议)。AF_INET(ipv4)
in_port_t sin_port; //16位端口
struct in_addr sin_addr; //32位地址
char sin_zero[8]; //保留字段
}
struct in_addr{
in_addr_t s_addr; //无符号32位整数
}

1、网络字节序:规定为大端字节序。主机可能是大端字节序也可能小端字节序
2、大端字节序:高位存放于低内存,低位存放于高内存
3、小端字节序:高位存放于高内存,低位存放于低内存
主机字节序---->网络字节序------>主机字节序
下面是一个测试主机字节序的程序
#include <stdio.h>
int main(void)
{
unsigned int x=0x12345678;
unsigned char *p=(unsigned char *)&x;
printf("%0x,%0x,%0x,%0x\n",p[0],p[1],p[2],p[3]);//低地址放低位78.小端字节序
return 0;
}
字节序转换函数:
1、uint32_t htonl(unit32_t hostlong); //32位主机字节序转换为网络字节序
2、uint16_t htons(uint16_t hostshort); //16位主机字节序转换为网络字节序
3、uint32_t ntohl(uint32_t netlong); //32位网络字节序转换成主机字节序
4、uint16_t ntohs(uint16_t netlong); //16位网络字节序转换成主机字节序
h:host n:network s:short l:long(int)
#include <stdio.h>
#include<arpa/inet.h>
int main(void)
{ unsigned int x=0x12345678;
unsigned char *p=(unsigned char *)&x;
printf("%0x,%0x,%0x,%0x\n",p[0],p[1],p[2],p[3]);//低地址放低位78.小端字节序 unsigned int y=htonl(x);
p=(unsigned char *)&y;
printf("%0x,%0x,%0x,%0x\n",p[0],p[1],p[2],p[3]);//网络字节序(大端)
return 0;
}
地址转换函数:
1、in_addr_t inet_addr(const char*cp); //点分十进制的地址(192.168.0.100)转换成32位整数(网络字节序)
2、char * inet_ntoa(struct in_addr in); //网络字节序地址结构转换成点分十进制
3、int inet_aton(const char * cp, struct in_addr* inp); //和第一个相同,将点分十进制转换成32位整数
1 #include <stdio.h>
2 #include<arpa/inet.h>
3 int main()
4 {
5 unsigned long addr=inet_addr("192.168.0.100");//将其转换成网络字节序
6 printf("addr=%u\n",ntohl(addr));//转成主机字节序号,无符号输出
7
8 struct in_addr ipaddr;
9 ipaddr.s_addr=addr;
10 printf("Ip=%s\n",inet_ntoa(ipaddr));//网络字节序地址转换成点分十进制
11 return 0;
12 }
socket套接字(字节序、地址转换)的更多相关文章
- socket套接字编程
一.概述 1.socket是一种进程间通信方式,既可以用于一台机器,也可以用于网络.常用语C/S模型. 2.可以跨越Windows和Linux操作系统,可以跨越不同语言. 3.注意网络字节序和主机字节 ...
- 网络编程--Socket(套接字)
网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...
- socket套接字TCP API
socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...
- c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换
最近使用C#进行网络开发,需要处理ISO8583报文,由于其中有些域是数值型的,于是在传输的时候涉及到了字节序的转换. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序, ...
- 19 网络编程--Socket 套接字方法
1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...
- Linux之socket套接字编程20160704
介绍套接字之前,我们先看一下传输层的协议TCP与UDP: TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UD ...
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- Java网络编程(一)Socket套接字
一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...
- socket套接字编程 HTTP协议
socket套接字编程 套接字介绍 1. 套接字 : 实现网络编程进行数据传输的一种技术手段 2. Python实现套接字编程:import socket 3. 套接字分类 >流式套接 ...
随机推荐
- Rust之路(0)
Rust--一个2012年出现,2015年推出1.0版本的"年轻"语言.在 2016 至 2018 年的 stack overflow 开发人员调查中,被评比为 "最受欢 ...
- K8S节点异常怎么办?TKE"节点健康检查和自愈"来帮忙
节点健康检测 意义 在K8S集群运行的过程中,节点常常会因为运行时组件的问题.内核死锁.资源不足等各种各样的原因不可用.Kubelet默认对节点的PIDPressure.MemoryPressure. ...
- 【故障公告】博客系统升级到 .NET 5.0 引发的故障
昨天晚上我们将博客系统从 .NET Core 3.1 升级到了 .NET 5.0 ,本来是一次很有信心的升级,但没有想到在今天下午访问高峰时竟然出现了故障,大量请求访问速度变慢或者因为下面的数据库连接 ...
- MeteoInfoLab脚本示例:计算温度平流
需要温度和风场U/V分量格点数据,计算中主要用到cdiff函数,结果用GrADS验证一致.脚本程序: print 'Open data files...' f_air = addfile('D:/Te ...
- day57 Pyhton 前端Jquery09
内容回顾: - 筛选选择器 $('li:eq(1)') 查找匹配的元素 $('li:first') $('li:last') - 属性选择器 - 筛选的方法 - find() 查找后代的元素 - ...
- JS中实现Trim(),TrimStart(),TrimEnd() 的方法
//去除字符串头尾空格或指定字符 String.prototype.Trim = function (c) { if (c == null || c == "") { var st ...
- firstBlog
第一篇博客 markdown语法的学习 基本语法 标题与段落 在文字前面加1-6个#号来表示来代表一级标题到六级标题 一级标题 五级标题 列表 对于无序列表,可以使用字符-,+和*作为列表的标记 - ...
- oh my zsh 安装
date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 安装" tags: ["zsh",& ...
- centos8上使用crond
一,查看crond的状态: [root@yjweb crontab]# systemctl status crond 说明:和其他service的执行相同: 启动:systemctl start cr ...
- centos6.8 Mysql-5.7.20 升级 mysql-8.0.14-1
Mysql-5.7.20 升级 mysql-8.0.14-1 操作前建议先查阅以下网页初步了解Mysql版本升级信息 https://blog.csdn.net/u012946310/artic ...