第一章 网络编程基础

网络编程基础

1. 网络编程基础概念

对于C/C++编程人员来说,网络编程的本质实际就是使用系统提供的网络编程接口,完成应用程序的网络数据收发功能。

在这里插入图片描述

2. 网络编程核心概念

网络编程中一般我们会经常听到一些概念,如地址、端口号、协议等。

地址:网络通讯中用于标志设备的整数值,如192.168.1.1,一个IP可以标志一个网卡设备,拿个单网卡的机器举例,一个IP指定了网络传输时往哪台机器上面发送;一台机器上面一般都会运行着很多个应用程序,如何判断数据是发往哪个应用程序的,这就要涉及到端口号

端口号:用于标记具体的连接的整型值(1~65535)

协议:网络中的数据传输交互时,定义的规则

角色:根据作用可分为服务端和客户端两种角色,其中,服务端表示等待连接的设备,客户端表示发起连接的设备。

在这里插入图片描述

3. 网络字节序

不同CPU中,4字节整数值在内存空间的保存方式是不同的。如4字节整数值1可用二进制表示如下两种形式:

  1. 00000000 00000000 00000000 00000001
  2. 00000001 00000000 00000000 00000000

若不考虑这些就收发数据则会发生数据错乱问题,因为保存顺序的不同意味着对接收数据的解析顺序也不相同。

在解决这个问题之前先了解两个概念。

  • 大端模式:数据低字节放在内存的高地址中
  • 小端模式:数据低字节放在内存的低地址中

举个例子,假设在0x20号开始的地址中保存4字节int类型书0x12345678,0x12是数据最高位,0x78是数据最低位;所以大端模式中低字节放在低地址中,0x78放在0x103,小端模式中0x78放在0x100,如下图

在这里插入图片描述

目前主流的英特尔CPU以小端模式保存数据,平时常用的51单片机就属于大端模式CPU。

网络字节序:网络传输数据时约定的统一数据传输方式,即大端模式,数据传输时先把数据数组统一转化为大端序格式再进行网络传输。所以在小端系统中需要做字节序转换。
但是直接使用linux接口时,除了sockaddr_in结构体外,数据传输时,数据的大小端模式会自动进行转换,无需考虑字节序的问题.
其中,sockaddr_in实际是一个保存IPV4类型地址的结构体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值