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

Socket网络编程:TCP/UDP原理、服务端与客户端手写实战

博客导语

Socket是所有网络请求的底层,HTTP、爬虫、接口请求本质都是封装后的Socket通信。90%爬虫开发者只会调库不懂底层,遇到粘包、断连、超时问题完全无从下手。本文从零手写TCP、UDP服务端与客户端,吃透网络通信底层逻辑。


一、Socket核心概念

Socket(套接字)是操作系统提供的网络通信接口,通过「IP+端口」实现跨设备数据传输。

两大主流协议:

  • TCP:面向连接、可靠、三次握手、四次挥手、无数据丢失、流式传输

  • UDP:无连接、不可靠、速度快、数据包传输、适合直播/语音


二、TCP通信完整实战(一对一通信)

TCP服务端

import socket # 1. 创建socket对象 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 绑定IP和端口 server.bind(("127.0.0.1", 8888)) # 3. 开启监听 server.listen(5) print("服务端启动成功,等待客户端连接...") # 4. 等待客户端连接 conn, addr = server.accept() print(f"客户端{addr}已连接") # 5. 收发数据 while True: data = conn.recv(1024).decode("utf-8") if not data: break print("收到客户端消息:", data) conn.send("服务端已收到!".encode("utf-8")) conn.close() server.close()

TCP客户端

import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 8888)) client.send("Hello Socket".encode("utf-8")) res = client.recv(1024).decode("utf-8") print("服务端回复:", res) client.close()

三、UDP通信实战(无连接通信)

UDP服务端

import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind(("127.0.0.1", 9999)) while True: data, addr = server.recvfrom(1024) print("收到消息:", data.decode("utf-8")) server.sendto("UDP收到".encode("utf-8"), addr)

UDP客户端

import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client.sendto("UDP测试消息".encode("utf-8"), ("127.0.0.1", 9999))

四、高频面试&避坑总结

  • TCP面向连接、可靠、有序;UDP无连接、高效、可能丢包

  • TCP存在粘包问题,UDP无粘包

  • 爬虫、HTTP、接口全部基于TCP

http://www.jsqmd.com/news/1046950/

相关文章:

  • 深入解析ColdFire SDRAM控制器:从原理到嵌入式系统内存扩展实战
  • 北京市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 如何快速掌握Illustrator脚本:5分钟批量替换完全指南
  • Python毕业设计-基于 Django 与协同过滤算法的图书推荐系统的设计与实现 融合协同过滤算法的智能图书推荐平台(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 达州市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 从GSM手机平台看嵌入式系统分层架构与模块化开发实践
  • 网线直连仿真器 (Spectrum Digital XDS560v2) 和主机 (Windows 7 系统)
  • 品牌视觉操作系统:用AI实现可追溯、可迭代的VI设计
  • 小程序问诊链路交互功能优化记录
  • Gemini 3.1 Pro零配置接入:边缘计算+声明式路由实战
  • 毕节市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收
  • 稀疏嵌入调制技术:视觉语言模型去偏新方法
  • AI工具涨价风波背后的用户主权与确定性危机
  • 2026年6月头部宠物皮肤科医院推荐,宠物眼科/猫咪体检/异宠/宠物皮肤/宠物骨科/猫咪绝育/宠物,宠物皮肤科专家找哪家 - 品牌推荐师
  • 【毕业设计】基于 Python 的教育习题资源管理系统的设计与实现 基于 Python 的题包整合与智能处理系统(源码+文档+远程调试,全bao定制等)
  • 深入解析MPC8360E/MPC8358E处理器接口电气特性与硬件设计实践
  • 设置路由器当作交换机使用
  • 2020年CSP-X复赛真题及题解(T4:分糖果)
  • 渗透测试实战:CDN绕过与子域名爆破核心技术解析
  • LLM嵌入技术在表格数据预测中的应用与实践
  • 沃尔玛成钓鱼攻击首选目标:高仿真品牌钓鱼的攻防解析与防范指南
  • 5个实用技巧:用FitGirl游戏启动器轻松管理你的压缩版游戏库
  • Venom多级代理工具:内网渗透测试的集中化与可视化利器
  • Embedding微调实战:从语义校准到业务效果归因
  • 如何高效转换3DS游戏格式:专业用户的完整实战指南
  • 掌握创新屏幕标注工具:提升演示效率的智能方案
  • 软件测试基础:黑盒、白盒、灰盒测试
  • 多智能体系统中的向量化声誉传播机制TrustFlow解析
  • 国产大模型编程实战:上下文保真度与框架锚定能力评测
  • 腾讯混元HunYuan3D-1.0开源:文本生成可商用3D网格的工业级实践