首页 > 编程语言 >Python 进阶 03 网络编程

Python 进阶 03 网络编程

时间:2024-09-17 23:25:16浏览次数:13  
标签:03 服务器端 Python 编程 端口号 客户端 连接 Socket 进阶

网络编程概述

网络编程,又称套接字编程(Socket编程),是实现不同计算机上运行的程序间进行数据交互的关键技术。它允许程序通过网络发送和接收数据,无论这些程序是运行在同一台机器上还是分布在不同地理位置的计算机上。网络编程是现代软件开发中不可或缺的一部分,广泛应用于Web开发、即时通讯、分布式系统等领域。

三要素

IP地址

IP地址是设备在网络中的唯一标识。它分为IPv4和IPv6两种标准:

  • IPv4:使用4字节(32位)表示,通常以十进制形式出现,如192.168.13.157。IPv4地址根据用途和范围分为不同的类别,如城域网、广域网和局域网。
  • IPv6:旨在解决IPv4地址空间不足的问题,使用16字节(128位)表示,通常以十六进制形式出现。IPv6理论上可以为地球上的每一粒沙子分配一个唯一的IP地址。

相关DOS命令:

  • 查看IPipconfig(Windows系统)或ifconfig(Linux/Mac系统)
  • 测试网络连接ping命令,可以测试到指定域名或IP地址的网络连接状态。
  • 特殊IP127.0.0.1是本地回环地址,用于本机上的网络测试和程序间通信。
端口号

端口号是程序在设备上的唯一标识,用于区分同一台机器上运行的不同程序。端口号的范围是0到65535,其中0到1023为系统保留端口,通常用于标准服务(如HTTP的80端口,HTTPS的443端口)。

协议

协议是通信双方必须遵守的规则和约定,常见的网络协议包括UDP和TCP:

  • UDP(用户数据报协议):
    • 无连接协议,发送数据前不需要建立连接。
    • 面向报文的,每个数据报的大小限制在64K以内。
    • 不可靠,不保证数据到达的顺序和完整性。
    • 传输效率高,适用于实时性要求高的场景,如在线视频、语音通话等。
  • TCP(传输控制协议):
    • 面向连接的协议,在发送数据前需要建立连接。
    • 基于字节流,无固定报文大小限制。
    • 可靠,通过三次握手建立连接,通过校验和、序列号、确认应答等机制确保数据可靠传输。
    • 区分客户端和服务器端,适合大数据量传输,如文件传输、网页浏览等。

扩展:TCP的三次握手和四次挥手

  • 三次握手
    1. 客户端发送SYN包(同步序列编号)到服务器端,进入SYN_SENT状态,等待服务器确认。
    2. 服务器端收到SYN包,确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RCVD状态。
    3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
  • 四次挥手
    TCP连接的终止需要经历一个“四次挥手”的过程,以确保数据完全发送完毕,且双方都能正常关闭连接。

Socket编程原理

Socket编程是基于套接字的网络通信方式。通信双方都拥有各自的Socket对象,数据通过Socket以数据报包或字节流的形式进行传输。Socket编程的关键在于创建Socket对象、绑定IP地址和端口号、建立连接、发送和接收数据,以及关闭连接。

端口号复用
由于端口号的释放通常需要一定时间,如果立即使用未被释放的端口号,会导致错误。解决方案包括手动修改端口号或设置端口号复用(如setsockopt设置SO_REUSEADDR选项)。

编解码

编解码是字符串和二进制数据之间相互转换的过程。编码是将人类可读的字符串转换为计算机可识别的二进制数据,解码则是将二进制数据转换回人类可读的字符串。编解码过程中需要注意码表的选择,以避免乱码问题。

网络编程操作步骤

客户端
  1. 创建客户端Socket对象。
  2. 连接服务器端(指定IP地址和端口号)。
  3. 接收服务器端的消息。
  4. 发送数据到服务器端。
  5. 释放资源,关闭Socket连接。
服务器端
  1. 创建服务器端Socket对象。
  2. 绑定服务器端的IP地址和端口号。
  3. 设置监听连接数(即同时允许多少个客户端连接)。
  4. 启动监听,等待客户端建立连接。
  5. 接收客户端的连接请求,创建新的Socket对象与客户端通信。
  6. 发送数据到客户端。
  7. 接收客户端的回执信息。
  8. 释放资源,关闭Socket连接。

案例

  1. 基础案例:客户端向服务器端发送一句话,并接收服务器端的回应。
  2. 多客户端案例:模拟服务器同时处理多个客户端的请求。
  3. 长连接案例:客户端和服务器端建立连接后,保持连接状态,持续收发数据,直至特定条件触发断开连接。
  4. 文件传输案例:客户端向服务器端上传文件,服务器端接收并保存文件。

通过这些案例,可以深入理解网络编程的实战应用,掌握Socket编程的基本技能和高级特性。

标签:03,服务器端,Python,编程,端口号,客户端,连接,Socket,进阶
From: https://blog.csdn.net/DREAM_xs/article/details/142169999

相关文章

  • 代码随想录Day3 | LeetCode 203. 移除链表元素、LeetCode 707. 设计链表、LeetCode 20
    LeetCode203.移除链表元素链表基础概念题,也可以用递归做,不过我们把递归的思想放在更能体现它的LeetCode206.反转链表#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next......
  • 周也带你进阶OpenCV (1)--采样、直方图即均衡化、掩膜
    文章目录OpenCV高阶操作一、上、下采样1.上采样2.下采样3.恢复原图二、直方图1.plt.hist()绘图2.cv2.calcHist()绘图三、mask掩膜1.原图2.创建黑白图像3.掩膜4.绘制曲线图四、直方图均衡化1.直方图均衡化2.自适应直方图均衡化(局部直方图处理)总结......
  • 【时时三省】(C语言基础)指针进阶 例题8
    山不在高,有仙则名。水不在深,有龙则灵。              ----CSDN时时三省第一个打印2a+6不管它是多大前面是=s 都得变成两个字节所以打印2第二个打印5sizeof里面的表达式是不参与运算的所以打印5上面所有例题总结:数组名的意义1.sizeof(......
  • 基于python+Django的学生成绩管理系统(源码+vue+前后端分离)
    收藏关注不迷路!!......
  • 网站报错 :SLQSTATE[HY000]:General error:145 Table './**@002******@/002ecn/ey_config
    错误信息 SQLSTATE[HY000]:Generalerror:145Table'./**@002******@/002ecn/ey_config'ismarkedascrashedandshouldberepaired 表明数据库表出现了损坏,并且需要进行修复。具体原因可能是:表损坏:数据库表因某种原因(如硬件故障、突然断电等)而损坏。存储引擎问题:使用......
  • General error: 1366 Incorrect string value: '\xF0\x9F\x98' for column 'conten
    错误信息 Generalerror:1366Incorrectstringvalue:'\xF0\x9F\x98'forcolumn'content' 表明插入的数据包含不正确的字符或编码问题。具体原因可能是:字符集不匹配:数据库表的字符集与应用中使用的字符集不一致。字段类型不支持某些字符:VARCHAR 或 TEXT 类型字段可能......
  • SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F...' for
    错误信息 SQLSTATE[HY000]:Generalerror:1366Incorrectstringvalue:'\xF0\x9F...'forcolumn'content'atrow1 表明插入的数据包含不正确的字符或编码问题。具体原因可能包括:字符集不匹配:数据库表的字符集与应用中使用的字符集不一致。字段类型不支持某些字符:VARC......
  • 10_Python流程控制_循环
    循环循环是控制程序重复执行特定代码块的关键结构。Python提供了几种不同的循环结构,以满足不同的编程需求。While循环while循环会重复执行一个代码块,只要指定的条件为真。适用情况:不清楚具体的循环次数,或者当条件一直为真时一般用while。注意:条件中的变量在while迭代......
  • SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial commu
    错误信息 SQLSTATE[HY000][2013]LostconnectiontoMySQLserverat'readinginitialcommunicationpacket',systemerror:111 翻译成中文为:在读取初始化数据包时失去到MySQL服务器的连接,系统错误111。通讯包初始化失败,估计是不允许连接访问引起的。解决办法以下是......
  • Python脚本生成可执行文件
    将python文件生产可执行文件,可以在其他不同的环境下使用,即使没有安装python的环境也可以使用,避免了python文件或脚本需要在安装了python的环境下才能使用,提高了便利性一.安装pyinstaller    将python脚本生成可执行文件,需要通过pyinstaller工具,需提前安装,安装方法为......