网络编程概述
网络编程,又称套接字编程(Socket编程),是实现不同计算机上运行的程序间进行数据交互的关键技术。它允许程序通过网络发送和接收数据,无论这些程序是运行在同一台机器上还是分布在不同地理位置的计算机上。网络编程是现代软件开发中不可或缺的一部分,广泛应用于Web开发、即时通讯、分布式系统等领域。
三要素
IP地址
IP地址是设备在网络中的唯一标识。它分为IPv4和IPv6两种标准:
- IPv4:使用4字节(32位)表示,通常以十进制形式出现,如
192.168.13.157
。IPv4地址根据用途和范围分为不同的类别,如城域网、广域网和局域网。 - IPv6:旨在解决IPv4地址空间不足的问题,使用16字节(128位)表示,通常以十六进制形式出现。IPv6理论上可以为地球上的每一粒沙子分配一个唯一的IP地址。
相关DOS命令:
- 查看IP:
ipconfig
(Windows系统)或ifconfig
(Linux/Mac系统) - 测试网络连接:
ping
命令,可以测试到指定域名或IP地址的网络连接状态。 - 特殊IP:
127.0.0.1
是本地回环地址,用于本机上的网络测试和程序间通信。
端口号
端口号是程序在设备上的唯一标识,用于区分同一台机器上运行的不同程序。端口号的范围是0到65535,其中0到1023为系统保留端口,通常用于标准服务(如HTTP的80端口,HTTPS的443端口)。
协议
协议是通信双方必须遵守的规则和约定,常见的网络协议包括UDP和TCP:
- UDP(用户数据报协议):
- 无连接协议,发送数据前不需要建立连接。
- 面向报文的,每个数据报的大小限制在64K以内。
- 不可靠,不保证数据到达的顺序和完整性。
- 传输效率高,适用于实时性要求高的场景,如在线视频、语音通话等。
- TCP(传输控制协议):
- 面向连接的协议,在发送数据前需要建立连接。
- 基于字节流,无固定报文大小限制。
- 可靠,通过三次握手建立连接,通过校验和、序列号、确认应答等机制确保数据可靠传输。
- 区分客户端和服务器端,适合大数据量传输,如文件传输、网页浏览等。
扩展:TCP的三次握手和四次挥手
- 三次握手:
- 客户端发送SYN包(同步序列编号)到服务器端,进入SYN_SENT状态,等待服务器确认。
- 服务器端收到SYN包,确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RCVD状态。
- 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
- 四次挥手:
TCP连接的终止需要经历一个“四次挥手”的过程,以确保数据完全发送完毕,且双方都能正常关闭连接。
Socket编程原理
Socket编程是基于套接字的网络通信方式。通信双方都拥有各自的Socket对象,数据通过Socket以数据报包或字节流的形式进行传输。Socket编程的关键在于创建Socket对象、绑定IP地址和端口号、建立连接、发送和接收数据,以及关闭连接。
端口号复用:
由于端口号的释放通常需要一定时间,如果立即使用未被释放的端口号,会导致错误。解决方案包括手动修改端口号或设置端口号复用(如setsockopt
设置SO_REUSEADDR
选项)。
编解码
编解码是字符串和二进制数据之间相互转换的过程。编码是将人类可读的字符串转换为计算机可识别的二进制数据,解码则是将二进制数据转换回人类可读的字符串。编解码过程中需要注意码表的选择,以避免乱码问题。
网络编程操作步骤
客户端
- 创建客户端Socket对象。
- 连接服务器端(指定IP地址和端口号)。
- 接收服务器端的消息。
- 发送数据到服务器端。
- 释放资源,关闭Socket连接。
服务器端
- 创建服务器端Socket对象。
- 绑定服务器端的IP地址和端口号。
- 设置监听连接数(即同时允许多少个客户端连接)。
- 启动监听,等待客户端建立连接。
- 接收客户端的连接请求,创建新的Socket对象与客户端通信。
- 发送数据到客户端。
- 接收客户端的回执信息。
- 释放资源,关闭Socket连接。
案例
- 基础案例:客户端向服务器端发送一句话,并接收服务器端的回应。
- 多客户端案例:模拟服务器同时处理多个客户端的请求。
- 长连接案例:客户端和服务器端建立连接后,保持连接状态,持续收发数据,直至特定条件触发断开连接。
- 文件传输案例:客户端向服务器端上传文件,服务器端接收并保存文件。
通过这些案例,可以深入理解网络编程的实战应用,掌握Socket编程的基本技能和高级特性。
标签:03,服务器端,Python,编程,端口号,客户端,连接,Socket,进阶 From: https://blog.csdn.net/DREAM_xs/article/details/142169999