news 2026/4/9 17:49:36

网络编程问题:TCP/UDP 连接异常解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络编程问题:TCP/UDP 连接异常解决方案

TCP/UDP 连接异常解决方案代码示例

以下是一个基于 Python 的 TCP/UDP 连接异常处理代码示例,涵盖常见的连接异常场景(如超时、连接拒绝、端口占用等),并提供重试机制和日志记录功能。

TCP 连接异常处理
import socket import time import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def tcp_connect_with_retry(host, port, max_retries=3, timeout=5): retry_count = 0 while retry_count < max_retries: try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout) sock.connect((host, port)) logger.info(f"TCP connection established to {host}:{port}") return sock except socket.timeout: logger.warning(f"TCP connection timeout (attempt {retry_count + 1})") except ConnectionRefusedError: logger.error(f"Connection refused by {host}:{port}") except socket.error as e: logger.error(f"Socket error: {str(e)}") finally: retry_count += 1 time.sleep(1) raise ConnectionError(f"Failed to establish TCP connection after {max_retries} retries")

https://www.zhihu.com/zvideo/1994260861682997179/
https://www.zhihu.com/zvideo/1994260861682997179
https://www.zhihu.com/zvideo/1994260860697341967/
https://www.zhihu.com/zvideo/1994260860697341967
https://www.zhihu.com/zvideo/1994260857056671243/
https://www.zhihu.com/zvideo/1994260857056671243
https://www.zhihu.com/zvideo/1994260851021071994/
https://www.zhihu.com/zvideo/1994260851021071994
https://www.zhihu.com/zvideo/1994260850433886062/
https://www.zhihu.com/zvideo/1994260850433886062
https://www.zhihu.com/zvideo/1994260847934066912/
https://www.zhihu.com/zvideo/1994260847934066912
https://www.zhihu.com/zvideo/1994260843584570191/
https://www.zhihu.com/zvideo/1994260843584570191
https://www.zhihu.com/zvideo/1994260839423832246/
https://www.zhihu.com/zvideo/1994260839423832246
https://www.zhihu.com/zvideo/1994260838081664990/
https://www.zhihu.com/zvideo/1994260838081664990
https://www.zhihu.com/zvideo/1994260835078529378/
https://www.zhihu.com/zvideo/1994260835078529378
https://www.zhihu.com/zvideo/1994260833497273482/
https://www.zhihu.com/zvideo/1994260833497273482
https://www.zhihu.com/zvideo/1994260832259966840/
https://www.zhihu.com/zvideo/1994260832259966840
https://www.zhihu.com/zvideo/1994260832532583874/
https://www.zhihu.com/zvideo/1994260832532583874
https://www.zhihu.com/zvideo/1994260827105146355/
https://www.zhihu.com/zvideo/1994260827105146355
https://www.zhihu.com/zvideo/1994260823569364542/
https://www.zhihu.com/zvideo/1994260823569364542
https://www.zhihu.com/zvideo/1994260822684356958/
https://www.zhihu.com/zvideo/1994260822684356958
https://www.zhihu.com/zvideo/1994260818049655700/
https://www.zhihu.com/zvideo/1994260818049655700
https://www.zhihu.com/zvideo/1994260817747674698/
https://www.zhihu.com/zvideo/1994260817747674698
https://www.zhihu.com/zvideo/1994260815390463543/
https://www.zhihu.com/zvideo/1994260815390463543
https://www.zhihu.com/zvideo/1994260811632358143/
https://www.zhihu.com/zvideo/1994260811632358143

UDP 连接异常处理
def udp_send_with_retry(host, port, data, max_retries=3, timeout=5): retry_count = 0 while retry_count < max_retries: try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(timeout) sock.sendto(data.encode(), (host, port)) logger.info(f"UDP data sent to {host}:{port}") return sock except socket.timeout: logger.warning(f"UDP send timeout (attempt {retry_count + 1})") except socket.error as e: logger.error(f"UDP socket error: {str(e)}") finally: retry_count += 1 time.sleep(1) raise ConnectionError(f"Failed to send UDP data after {max_retries} retries")

https://www.zhihu.com/zvideo/1994266399967815160/
https://www.zhihu.com/zvideo/1994266399967815160
https://www.zhihu.com/zvideo/1994266394804638799/
https://www.zhihu.com/zvideo/1994266394804638799
https://www.zhihu.com/zvideo/1994266393525372736/
https://www.zhihu.com/zvideo/1994266393525372736
https://www.zhihu.com/zvideo/1994266392124466186/
https://www.zhihu.com/zvideo/1994266392124466186
https://www.zhihu.com/zvideo/1994266391612769736/
https://www.zhihu.com/zvideo/1994266391612769736
https://www.zhihu.com/zvideo/1994266391889604666/
https://www.zhihu.com/zvideo/1994266391889604666
https://www.zhihu.com/zvideo/1994266389448504132/
https://www.zhihu.com/zvideo/1994266389448504132
https://www.zhihu.com/zvideo/1994266387447832880/
https://www.zhihu.com/zvideo/1994266387447832880
https://www.zhihu.com/zvideo/1994266387040981461/
https://www.zhihu.com/zvideo/1994266387040981461
https://www.zhihu.com/zvideo/1994266386592199141/
https://www.zhihu.com/zvideo/1994266386592199141
https://www.zhihu.com/zvideo/1994266373937967153/
https://www.zhihu.com/zvideo/1994266373937967153
https://www.zhihu.com/zvideo/1994266375666034264/
https://www.zhihu.com/zvideo/1994266375666034264
https://www.zhihu.com/zvideo/1994266370750301136/
https://www.zhihu.com/zvideo/1994266370750301136
https://www.zhihu.com/zvideo/1994266368053359641/
https://www.zhihu.com/zvideo/1994266368053359641
https://www.zhihu.com/zvideo/1994266368544096292/
https://www.zhihu.com/zvideo/1994266368544096292
https://www.zhihu.com/zvideo/1994266367365490383/
https://www.zhihu.com/zvideo/1994266367365490383
https://www.zhihu.com/zvideo/1994266365352248655/
https://www.zhihu.com/zvideo/1994266365352248655
https://www.zhihu.com/zvideo/1994266364907635656/
https://www.zhihu.com/zvideo/1994266364907635656
https://www.zhihu.com/zvideo/1994266364546942673/
https://www.zhihu.com/zvideo/1994266364546942673
https://www.zhihu.com/zvideo/1994266364588873142/
https://www.zhihu.com/zvideo/1994266364588873142

端口占用检测
def is_port_in_use(port, protocol='tcp'): try: if protocol.lower() == 'tcp': sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) else: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('0.0.0.0', port)) sock.close() return False except socket.error: return True
使用示例
if __name__ == "__main__": # TCP 示例 try: tcp_sock = tcp_connect_with_retry("example.com", 80) tcp_sock.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") response = tcp_sock.recv(4096) print(response.decode()) except Exception as e: print(f"TCP error: {str(e)}") # UDP 示例 try: udp_sock = udp_send_with_retry("example.com", 53, "test data") data, addr = udp_sock.recvfrom(1024) print(f"Received UDP data from {addr}: {data.decode()}") except Exception as e: print(f"UDP error: {str(e)}") # 端口检测 print(f"Port 80 in use (TCP): {is_port_in_use(80)}") print(f"Port 53 in use (UDP): {is_port_in_use(53, 'udp')}")
关键功能说明
  • 自动重试机制:通过max_retries参数控制最大重试次数
  • 超时处理:通过timeout参数设置连接/发送超时时间
  • 错误分类处理:区分超时、连接拒绝和其他socket错误
  • 日志记录:使用标准logging模块记录连接状态
  • 端口检测:支持检测TCP/UDP端口占用情况

该代码可通过调整参数适应不同网络环境,建议根据实际需求修改重试策略和超时时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 22:08:01

健身动作品质分析新利器?AI骨骼检测落地应用案例分享

健身动作品质分析新利器&#xff1f;AI骨骼检测落地应用案例分享 1. 引言&#xff1a;AI驱动的健身动作评估新范式 随着全民健身意识的提升&#xff0c;科学化、智能化的运动指导需求日益增长。传统健身教学依赖教练肉眼观察&#xff0c;主观性强且难以量化动作标准度。近年来…

作者头像 李华
网站建设 2026/4/8 15:35:49

AI姿态识别部署难题破解:MediaPipe免下载、零报错方案

AI姿态识别部署难题破解&#xff1a;MediaPipe免下载、零报错方案 1. 背景与痛点&#xff1a;AI人体骨骼关键点检测的落地挑战 在计算机视觉领域&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09; 是一项基础且关键的技术&#xff0c;广泛应用于健身指…

作者头像 李华
网站建设 2026/4/1 19:48:26

MediaPipe Pose参数详解:33个关节点定位技术揭秘

MediaPipe Pose参数详解&#xff1a;33个关节点定位技术揭秘 1. 引言&#xff1a;AI人体骨骼关键点检测的技术演进 1.1 从动作识别到姿态估计的跨越 随着计算机视觉技术的发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为智能健身、虚拟试…

作者头像 李华
网站建设 2026/4/4 7:09:24

构建自定义I2C HID设备驱动完整指南

手把手教你打造自定义I2C HID设备驱动&#xff1a;从协议到实战你有没有遇到过这样的场景&#xff1f;手头有一块定制的触摸控制器&#xff0c;引脚少、功耗低&#xff0c;只支持I2C接口。你想把它接进Linux系统&#xff0c;却发现evtest里没有新设备出现&#xff1b;dmesg里飘…

作者头像 李华
网站建设 2026/4/8 16:10:05

MediaPipe Pose高级教程:多人体姿态估计实现

MediaPipe Pose高级教程&#xff1a;多人体姿态估计实现 1. 引言&#xff1a;AI 人体骨骼关键点检测的工程价值 随着计算机视觉技术的发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为智能健身、动作捕捉、虚拟试衣、安防监控等场景的核心支…

作者头像 李华
网站建设 2026/3/29 2:29:30

MediaPipe Pose实战:构建智能监控系统

MediaPipe Pose实战&#xff1a;构建智能监控系统 1. 引言&#xff1a;AI人体骨骼关键点检测的现实价值 随着人工智能在计算机视觉领域的深入发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为智能安防、运动分析、虚拟试衣和人机交互等场景…

作者头像 李华