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

网络编程 总结一

一、网络基础:

概念:1> 网络编程的本质就是进程间的通信,只不过进程分布在不同的主机上

           2>在跨主机传输过程中,需要确定通信协议后,才可以通信

1.  OSI体系结构(重点)

定义7层模型:

 2. TCP协议     

 1)网络接口与物理层 

 3. IP地址划分

 4.点分十进制

 5.子网掩码

 TCP与UDP的端口号是相互独立的

二、跨主机传输

 1. 子节序(重点

字节序是计算机存储多字节整数序列的方式:

1>小端字节序:低序字节存储在地地址上

2>大端字节序:高序字节存储在地地址上

3>计算机的内存读取:都是从低地址往高地址读取的,然后通过大小端转换得出读取到的结果

4>char单字节,float double浮点类型,字符串以上均没有字节序的说法

 验证大小端存储?

#include<stdio.h>

union node
{
	unsigned int a;
	char b;
}

int main(int argc, const char *argv[])
{
	unsigned int a=0x87654321;
	char *ptr=(char*)&a;
	if(0x21==*ptr)
	{
		printf("小端\n");
	}
	else if(0x87==*ptr)
	{
		printf("大端\n");
	}

2. 本地字节序与网络字节序

本地字节序:主机字节序;网络字节序:规定使用大端字节序

在跨主机传输过程中,需要使用同一的字节序,即网络字节序,避免兼容性问题

3. 字节序转换函数

htons   htonl  主机字节序--->网络字节序

ntohs  ntohl  网络字节序--->主机字节序

4.结构体对齐

编译器会对结构体进行对齐,加速CPU取值周期,由于数据对齐也是与操作系统相关,不同的主机如果使用不同的对齐方式,会导致数据无法解析;所以网络传输结构体的时候需要取消结构体对齐


http://www.kler.cn/a/17263.html

相关文章:

  • git commit 校验
  • Python标准库模块的使用:math、datetime
  • c#使用COM接口设置excel单元格宽高匹配图片,如何计算?
  • 蓝凌OA-EKP hrStaffWebService 任意文件读取漏洞
  • MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server
  • 【循环神经网络】
  • Vim 文本查找/替换
  • 都23年了你还记得渐进式框架是什么意思吗
  • 国民技术N32G430开发笔记(18)- I2C1 从机收发数据
  • 【react全家桶学习】react组件中的ref属性(详)
  • K8S之HPA自动扩缩容机制
  • 【五一创作】QML、Qt Quick /Qt中绘制圆形
  • 第四章 数据关联分析方法
  • C/C++每日一练(20230504)
  • [Leetcode] 0697.数组的度
  • api 和 implementation 区别
  • 最大和+翻硬币(蓝桥杯JAVA解法)
  • 【python】创建python包
  • 浅谈MySQL索引以及执行计划
  • 自定义类型:结构体
  • Windeployqt 打包,缺少DLL 的原因分析,解决方法
  • 【网络】网络基础入门
  • Bean的作用域和生命周期
  • Splunk 转移数据之collect 命令
  • 功能齐全的 DIY ESP32 智能手表设计之PCB介绍
  • 一篇带你快速入门DDD领域驱动设计