当前位置: 首页 > news >正文

socket 及 字节序转换(嵌入式学习)

socket 及 字节序转换

  • socket简介
    • Socket
    • 为什么需要Socket?
    • socket类型
    • Socket通信模型
  • 字节序
    • 主机字节序到网络字节序
    • 网络字节序到主机字节序
    • IP地址转换

socket简介

1、1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口
2、1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信
3、现在很多应用 (FTP, Telnet) 都依赖这一接口

Socket

1、是一个编程接口
2、是一种特殊的文件描述符 (everything in Unix is a file)
3、并不仅限于TCP/IP协议
4、面向连接 (Transmission Control Protocol - TCP/IP)
5、无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)

为什么需要Socket?

普通的I/O操作过程
1、打开文件->读/写操作->关闭文件
2、TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作
3、进行网络通信的两个进程在不同的机器上,如何连接?
4、网络协议具有多样性,如何进行统一的操作 需要一种通用的网络编程接口:Socket

socket类型

流式套接字(SOCK_STREAM) TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM) UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问。

Socket通信模型

个进程来进行处理

端口号
1、为了区分一台主机接收到的数据包应该转交给哪,使用端口号来区分
2、TCP端口号与UDP端口号独立
3、端口号一般由IANA (Internet Assigned Numbers Authority) 管理
4、端口用两个字节来表示 2byte
众所周知端口:1-1023(1-255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
已登记端口:1024~49151
动态或私有端口:49152~65535

字节序

小端序(little-endian) - 低序字节存储在低地址 (主机字节序)
大端序(big-endian)- 高序字节存储在低地址 (网络字节序)

网络中传输的数据必须使用网络字节序,即大端字节序

笔试题:写一个函数,判断当前主机的字节序?

方式:共用体、指针强转、数据类型强转

主机字节序到网络字节序

u_long htonl (u_long hostlong);
u_short htons (u_short short);  //掌握这个  

网络字节序到主机字节序

u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);

IP地址转换

typedef uint32_t in_addr_t;
struct in_addr {in_addr_t s_addr;
};
in_addr_t inet_addr(const char *cp);  //从人看的ip地址转为机器使用的32位无符号整数
char *inet_ntoa(struct in_addr in);  //从机器到人
http://www.lryc.cn/news/60773.html

相关文章:

  • Java之~ Aop自定义注解日志
  • 编译原理个人作业--第四章
  • 学习笔记:数据库简介
  • day18_集合
  • Go面试必会基础题
  • 发送封包协议实现XXZ批量秒分解装备
  • Spring学习——Nginx
  • 记录 vue-cli 安装过程
  • 含氢微网优化调度模型matlab
  • 【springcloud开发教程】路由网关——zuul
  • DF竞赛平台携手嬴彻科技与清华大学智能产业研究院,助力自动驾驶挑战赛圆满落幕!
  • 234:vue+openlayers 加载本地shp数据,在map上显示图形
  • 网络模型-网络体系结构(OSI、TCP/IP)
  • 园区智慧导览地图软件,智慧工厂导航定位怎么解决方案的
  • Redis高可用之3种集群方案对比
  • java 线程唤醒于阻塞的常用方法
  • 面包多面包多面包多面包多面包多面包多
  • windows下Tomcat安装
  • 4月17号软件资讯更新合集.....
  • [java基础]面向对象(五)
  • React应用(基于React脚手架)
  • Redis(03)List--附有示例
  • openEuler-linux下部署zabbix-超级详细
  • nginx 简介 第四章
  • c++ float32 与 float16 互转
  • Redis问题
  • [API]ListList方法集合排序Lambda表达式(四)
  • 【ChatGPT】无需魔法打开即用的 AI 工具集锦
  • Choco-slover的使用
  • 亚马逊、ebay、temu如何提升产品点击率?测评自养号解析