当前位置: 首页 > news >正文

python编程语法基础笔记(4.13)(网络编程)

一、网络编程核心概述

1. 核心

让不同计算机上运行的程序实现数据交互(如聊天、传文件、接口调用),核心是基于 TCP/UDP 协议完成通信。

2. 网编三要素

要素作用关键细节
IP设备在网络中的唯一标识分 IPv4(四字节十进制,如 192.168.0.105)和 IPv6(八字节十六进制);一台设备可有多 IP(内网 + 外网),一个 IP 可对应多个端口
端口标识计算机内的进程取值范围 0-65535;0-1023 为系统占用端口,1024-49151 为注册端口,49152-65535 为动态私有端口(客户端临时使用);例:MySQL 默认端口 3306(可修改)
协议定义通信规则核心为 TCP/UDP,只有符合协议的设备才能通信

3. 进程与线程(基础补充)

进程:CPU 分配资源的最小单位,独立内存空间,进程间数据隔离(如微信、浏览器是不同进程);
线程:CPU 调度的基本单位,依附进程存在,同一进程内线程共享数据(如微信同时聊天、收消息、刷朋友圈);
通俗理解:进程是 “独立容器”,线程是 “容器里的工人”,容器间互不干扰,工人共享资源。

二、TCP vs UDP(核心通信协议)

1. 核心特性对比

特性TCP(传输控制协议)UDP(用户数据报协议)
连接特性面向连接(三次握手建立,四次挥手关闭)无连接(直接收发,无需建立连接)
可靠性可靠(保证数据不丢失、不重复、按序到达)不可靠(不管丢包,只管发送)
传输形式基于字节流(无消息边界,易粘包 / 拆包)基于数据包(界限清晰,发一次是一包)
速度慢(有确认、重传机制)极快(无额外开销)
典型应用场景网页浏览、文件下载、数据库连接直播、视频通话、游戏实时操作

2. TCP 关键问题:粘包 / 拆包

原因:TCP 是字节流,无消息边界,多条消息可能挤在一起(粘包),一条消息可能被拆分(拆包);
解决方法(应用层自定义规则):
固定长度:每条消息强制固定字节数(如 10 字节);
分隔符:每条消息结尾加特殊符号(如 \n);
长度 + 内容(最常用):前 N 字节表示内容长度,后续为实际数据(例:[5][hello][5][world])。

三、Socket 套接字(网络通信工具)

1. 核心定义

Socket(套接字)是进程间网络通信的工具,类比 “电脑之间通信的插座 + 插头”,是实现 TCP/UDP 通信的核心载体。

2. Socket 对象创建

import socket # 参数1:地址类型(AF_INET=IPv4,AF_INET6=IPv6) # 参数2:协议类型(SOCK_STREAM=TCP,SOCK_DGRAM=UDP) tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

四、编码与解码(数据传输必备)

网络传输的是字节流,需将字符串与字节相互转换:

1. 核心概念

编码:将可读字符串转为字节(str.encode(编码格式));
解码:将字节转回可读字符串(bytes.decode(编码格式))。

2. 关键细节

英文 / 数字 / 特殊符号:任意编码格式均占 1 字节;
中文:GBK 占 2 字节,UTF-8 占 3 字节;
二进制简写:b'字母/数字/特殊符号'(仅支持 ASCII 字符)。

3. 代码示例

s = '你好' # 编码 print(s.encode('utf-8')) # b'\xe4\xbf\xa1\xe6\x80\x9d\xe6\x99\xba\xe5\xad\xa6' print(s.encode('gbk')) # b'\xd0\xc5\xcb\xbc\xd6\xc7\xd1\xa7' # 解码 res = b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c' print(res.decode('utf-8')) # 你好世界

五、TCP Socket 实战(服务端 + 客户端)

1. 服务端流程(核心:监听 + 应答)

import socket # 1. 创建TCP Socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 绑定IP和端口 server_socket.bind(('192.168.0.105', 8888)) # 3. 设置监听(最多排队10个已握手未处理的连接) server_socket.listen(10) # 4. 等待客户端连接(阻塞),返回通信通道+客户端地址 conn, client_addr = server_socket.accept() # 5. 发送数据(需转字节) conn.send(b'hello') # 6. 接收数据(指定缓冲区大小,解码为字符串) data = conn.recv(1024).decode('utf-8') print(f'收到客户端消息:{data}') # 7. 关闭连接 conn.close()

2. 客户端流程(核心:连接 + 收发)

import socket # 1. 创建TCP Socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 连接服务端(IP+端口) client_socket.connect(('192.168.0.105', 8888)) # 3. 接收服务端数据 data = client_socket.recv(1024).decode('utf-8') print("收到服务端消息:", data) # 4. 发送数据(支持emoji,UTF-8编码) client_socket.send('🧓👨🏿👩🏿‍🦰'.encode('utf-8')) # 5. 关闭连接 client_socket.close()
http://www.jsqmd.com/news/639683/

相关文章:

  • Local SDXL-Turbo实战教程:用‘cyberpunk style, 4k, realistic’生成高清海报
  • 百度网盘免会员下载加速终极指南:三步实现满速下载
  • Shadcn-Vue终极指南:3个技巧打造专业级Vue组件库应用
  • 20N50 -ASEMI大电流场景的性能新标杆20N50
  • 2026年汽车电瓶栓、汽车连接器、保险盒口碑推荐榜单:浙江大欧电子车规级配套选型指南 - 海棠依旧大
  • FireRedASR-AED-L在MATLAB环境下的调用与性能分析
  • 2026活动小程序开发公司怎么选?麦冬科技提供定制方案(附带联系方式) - 品牌2025
  • 为什么你的文本文件总显示乱码?EncodingChecker 编码检测工具深度解析
  • 如何用Unlock Music Electron轻松解密加密音乐文件:终极完整指南
  • 基于单片机的智能家居门铃系统设计
  • 弦音墨影快速上手指南:3步启动视频理解系统,支持自然语言提问
  • 2026年4月药用级羟乙基纤维素与壳聚糖的供应选择解析 - 品牌推荐大师1
  • **发散创新:基于FFmpeg的视频编码优化实践与实战代码解析**在现代多媒
  • 2026社媒获客公司推荐:助力企业精准触达目标客户 - 品牌排行榜
  • 盘点2026年唐家、金湾、横琴别墅全屋定制公司,选哪家比较靠谱 - 工业品牌热点
  • 2026年洛阳江浙菜宴请完全指南:诱江南官方电话+4大品牌深度横评+避坑清单 - 精选优质企业推荐榜
  • Excel-Agent实测:这款AI做表工具,让我彻底告别了vlookup
  • STM32程序烧录成功但跑不起来?别急着怀疑人生,先检查这3个硬件配置(附BOOT引脚详解)
  • 成都别墅装修公司哪家口碑好?附2026最新排名推荐及避坑注意事项(含价格参考) - 成都人评鉴
  • 密封胶市场口碑分析:2026年哪些厂家值得关注?密封胶供应商立通诚信务实提供高性价比服务 - 品牌推荐师
  • 梳理婚礼舞台布置制造企业,哪家性价比高值得推荐 - 工业品网
  • [T.4]团队作业:选题和需求分析
  • 如何快速掌握AriaNg:提升下载效率的终极Web界面解决方案
  • Lyft 2026 面经|从 OA 到 VO 全流程真实分享
  • 显卡从 3060 到 5090 变化最大的是哪几款 性价比比较高的哪几个
  • 造纸/工业/电镀废水检测仪哪个牌子好?选购指南与品牌解析 - 品牌推荐大师
  • Hermes Agent 集成实践:从协议到生产
  • 2026年洛阳江浙菜宴请完全指南:诱江南官方联系电话+竞品深度横评+避坑指南 - 精选优质企业推荐榜
  • 告别环境搭建!深度学习项目训练环境镜像:5分钟开箱即用
  • 三步快速掌握北航毕业论文LaTeX模板的终极排版方案