第一章 网络编程基础
1. 网络编程基础概念
对于C/C++编程人员来说,网络编程的本质实际就是使用系统提供的网络编程接口 ,完成应用程序的网络数据收发功能。
2. 网络编程核心概念
网络编程中一般我们会经常听到一些概念,如地址、端口号、协议等。
地址:网络通讯中用于标志设备的整数值,如192.168.1.1,一个IP可以标志一个网卡设备,拿个单网卡的机器举例,一个IP指定了网络传输时往哪台机器上面发送;一台机器上面一般都会运行着很多个应用程序,如何判断数据是发往哪个应用程序的,这就要涉及到端口号
端口号:用于标记具体的连接的整型值(1~65535)
协议:网络中的数据传输交互时,定义的规则
角色:根据作用可分为服务端和客户端两种角色,其中,服务端表示等待连接的设备,客户端表示发起连接的设备。
3. 网络字节序
不同CPU中,4字节整数值在内存空间的保存方式是不同的。如4字节整数值1可用二进制表示如下两种形式:
- 00000000 00000000 00000000 00000001
- 00000001 00000000 00000000 00000000
若不考虑这些就收发数据则会发生数据错乱问题,因为保存顺序的不同意味着对接收数据的解析顺序也不相同。
在解决这个问题之前先了解两个概念。
- 大端模式:数据低字节放在内存的高地址中
- 小端模式:数据低字节放在内存的低地址中
举个例子,假设在0x20号开始的地址中保存4字节int类型书0x12345678,0x12是数据最高位,0x78是数据最低位;所以大端模式中低字节放在低地址中,0x78放在0x103,小端模式中0x78放在0x100,如下图
目前主流的英特尔CPU以小端模式保存数据,平时常用的51单片机就属于大端模式CPU。
网络字节序:网络传输数据时约定的统一数据传输方式,即大端模式,数据传输时先把数据数组统一转化为大端序格式再进行网络传输。所以在小端系统中需要做字节序转换。 但是直接使用linux接口时,数据的大小端模式会自动进行转换,实际编写代码无需考虑字节序的问题
|