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

认识Python数据包套接字

如你所知数据包格式套接字Datagram Sockets也叫“无连接的套接字”在代码中使用 SOCK_DGRAM 表示。可以将 SOCK_DGRAM 比喻成高速移动的摩托车快递它有以下特征强调快速传输而非传输顺序传输的数据可能丢失也可能损毁限制每次传输的数据大小数据的发送和接收是同步的。数据包套接字也使用 IP 协议作路由但是它不使用 TCP 协议而是使用 UDP 协议User Datagram Protocol用户数据报协议。实际应用中QQ 视频聊天和语音聊天主要使用 SOCK_DGRAM 来传输数据因为首先要保证通信的效率尽量减小延迟而数据的正确性是次要的即使丢失很小的一部分数据视频和音频也可以正常解析最多出现噪点或杂音不会对通信质量有实质的影响。当然SOCK_DGRAM 没有想象中的糟糕不会频繁的丢失数据数据错误只是小概率事件。我们将之前的程序改写一下让服务端与客户端之间使用 UDP 协议进行通信。服务端代码实现import time from socket import * import eventlet eventlet.monkey_patch() #用于绿化一些python的模块 serverSocketsocket(AF_INET,SOCK_DGRAM) #创建套接字对象 serverSocket.bind((127.0.0.1,6666)) #绑定IP和端口必须是元组形势 try: message,addrserverSocket.recvfrom(1024) #接受客户端连接connectionSocket是客户端连接服务器的信号addr是客户端地址 print(收到addr[0]:str(addr[1])的订单) time.sleep(10) #让线程等待10秒 serverSocket.sendto(bytes(您的订单已送达, encodingutf-8),addr) # 向客户端发送消息 for i in range(0,5): teventlet.Timeout(10,False) #设置超时时间为10秒 try: recv_data,addrserverSocket.recvfrom(1024) print(收到消息断开连接...) break except eventlet.timeout.Timeout as e: print(超时重试中...) serverSocket.sendto(bytes(您的订单已送达, encodingutf-8),addr) # 向客户端发送消息 finally: t.cancel() #终止进程 except IOError: serverSocket.close() #关闭套接字对象 serverSocket.close() #关闭套接字对象客户端代码实现from socket import * server_addr(127.0.0.1,6666) #服务器的地址 clientSocketsocket(AF_INET,SOCK_DGRAM) #创建套接字对象 try: print(等待外卖骑手送餐...) clientSocket.sendto(bytes(等待外卖骑手送餐...,encodingutf-8),server_addr) recv_data,addrclientSocket.recvfrom(1024) #接受服务器传来的消息 print(str(recv_data,encodingutf-8)) #输出到控制台 clientSocket.sendto(bytes(我已收到谢谢,encodingutf-8),server_addr) #向服务端发送消息 except IOError: clientSocket.close() #关闭套接字对象运行截图如下注意此时使用 UDP 协议通信时客户端与服务端之间没有建立连接这是因为 UDP 协议本身就是无连接的。服务端不再监听客户端的连接状态那么客户端就必须先发送消息告知对方服务端才能知道客户下单了。在实际生活中UDP 协议被应用于视频、音频等多媒体通信。
http://www.zskr.cn/news/1301610.html

相关文章:

  • Multisim 13.0 仿真实战:手把手教你搭建并调测一个4.6MHz石英晶体振荡器
  • 轻量级规则引擎决策逻辑执行器:从原理到工程实践
  • 手把手带你激活Matlab2016b:Windows 64位系统下的完整许可配置指南
  • 用STM32+LoRa+阿里云IoT Studio,我DIY了一个低成本畜牧电子围栏(附完整代码)
  • 基于GPS与LoRa的户外去中心化定位系统:硬件选型与算法实现
  • 软盘数据恢复:改造TEAC软驱读取Flippy Floppy磁盘背面数据
  • BigCodeBench:代码生成模型的“硬核”评测基准与工程实践指南
  • 从June手环拆解看BLE可穿戴设备硬件架构与低功耗设计
  • 容器化定时任务实践:基于Alpine的标准化Cron镜像设计与部署
  • 多模态AI智能体实战:从原理到应用,构建能看能听的智能系统
  • 从零打造专业GitHub个人资料页:Markdown与动态集成实战指南
  • 3D打印DIY摄影柔光箱:低成本实现专业级灯光控制
  • 基于PIR传感器与Adafruit MEMENTO的智能喂鸟器物联网项目实践
  • 教育机构构建AI应用实验平台时对API稳定性的需求与方案
  • 碳钢快开手孔与法兰人孔选型安装实用指南
  • Bifrost系统:基于漏波天线的低成本WiFi室内定位技术
  • Python Reddit数据采集与分析实战:从API调用到舆情监控
  • 开源AI代码助手实践:从数据到部署的全链路解析
  • 基于xclaude-plugin框架的Claude AI插件开发实战指南
  • 基于Groq API与FastAPI构建流式AI聊天应用:架构解析与工程实践
  • Arm SoC中PMU与PPU核心参数配置解析
  • SAMD21开发板刷写CircuitPython完整指南:从UF2引导加载器到Python嵌入式开发
  • AI记忆增强系统:向量数据库与摘要链构建持久化对话记忆
  • ElevenLabs菲律宾文TTS上线仅需7步:从账号配置、语言模型选择到情感语调微调的完整工作流
  • Python轻量级Instagram数据爬虫:基于GraphQL接口的稳定采集方案
  • LLM赋能传感器数据分析:从环境监测到智能洞察的实践探索
  • Nixtla时间序列预测生态:从统计模型到深度学习的统一实践
  • AI Agent Harness多语言支持:全球化设计
  • 【软考高级架构】论文范文13——论AI驱动的软件架构设计与工程实践
  • 【Canvas动画录制实战】从WebM到MP4:MediaRecorder全流程解析与避坑指南