目录
一、为什么要学习网络编程?
我们前面学习了进程间通信的方式,我们回顾一下都有哪些:
正是进程间通信方式无法实现多机通讯的缺陷,我们正要学习网络编程,下面我们一起正式学习网络编程相关知识。
二、Linux网络编程
1. 网络编程
2. Socket套接字
3.端口号的作用
一台拥有IP地址的主机可以提供多个服务,比如web服务、FTP服务、SMTP服务。
”IP地址+端口号“区分不同的服务;
服务器一般都通过端口号来识别。
三、TCP与UDP的区别
1.TCP面向连接,UDP无连接,即发送数据之前,不需要建立连接。我们前面提到的TCP就好比A与B打电话,而UDP好比A给B发短信;
2.TCP提供可靠的服务,无差错、不丢失、不重复、且按序到达;UDP尽最大努力交付,即不保证可靠交付。
3.TCP面向字节流,UDP面向报文,UDP没有拥塞控制;
4.每一条TCP连接只能是点到点的,UDP支持一对一、一对多、多对一和多对多的交互通信。
5.TCP首部开销20字节:UDP的首部开销小,只有8个字节;
6.TCP的逻辑通信信道是全双工的可靠通信,UDP则是半双工的不可靠通信(全双工和半双工继续借助打电话理解,全双工就是两人打电话,A跟B说话的同时,B可以给A说;半双工就是A给B打电话的同时B不能给A电话,那样是打不通的,这大家应该能理解)。
四、字节序
1.相关概念
字节序:多字节数据在计算机内存中存储或网络传输时多字节的存储顺序。
LE:小端字节序:按低序字节存储在起始地址
BE:大端字节序=网络字节序:按高序字节存储在起始地址
详细参考这篇博文:字节序详细解读_石子君的博客-CSDN博客
2.为什么要用字节序?
在进行数据交换的时候,A电脑上的A进程要把数据发出去,而电脑X86系列的CPU都是小端字节序,而网络字节序与小端字节序是相反的存储顺序,网络数据给另一台电脑就会发生错误。
3.字节序转换API
//htons函数 发 将主机字节序的端口 转换成 网络字节序的端口
uint16_t htons(uint16_t host16bitvalue); //返回网络字节序的值
//htonl函数 发 将主机字节序的IP地址 转换成网络字节序的IP地址
uint32_t htonl(uint32_t host32bitvalue); //返回网络字节序的值
//ntohs函数 收 将网络字节序的端口 转换成 主机字节序的端口
uint16_t ntohs(uint16_t net16bitvalue); //返回主机字节序的值
//ntohl函数 收 将网络字节序的IP地址
uint32_t ntohl(uint32_t net32bitvalue); //返回主机字节序的值
五、总结
通过本次学习,我们要知道我们为什么要学习网络编程,它和进程间通信的方式有什么本质区别,理解网络编程中地址包括IP地址和端口号,它们的作用是什么,以及TCP与UDP的区别,再到后面关于字节序的相关知识点。下篇博客我们学习Socket网络编程!记得来看哟!