news 2026/4/15 18:07:31

网络编程问题: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/4/11 14:31:45

Whisper-medium.en:轻松搞定英语语音转文字的AI神器

Whisper-medium.en&#xff1a;轻松搞定英语语音转文字的AI神器 【免费下载链接】whisper-medium.en 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-medium.en 导语&#xff1a;OpenAI推出的Whisper-medium.en模型凭借其出色的英语语音识别能力和广泛的…

作者头像 李华
网站建设 2026/4/14 6:00:09

MediaPipe本地运行优势解析:无网络依赖、零Token验证风险

MediaPipe本地运行优势解析&#xff1a;无网络依赖、零Token验证风险 1. 引言&#xff1a;AI人体骨骼关键点检测的现实挑战 在计算机视觉领域&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;是实现动作识别、运动分析、虚拟试衣、人机交互等应用的核…

作者头像 李华
网站建设 2026/4/11 10:41:36

图解说明I2C HID设备在DDK中的加载失败路径

深入拆解I2C HID设备“无法启动&#xff08;代码10&#xff09;”的加载失败路径你有没有遇到过这样的情况&#xff1a;笔记本触控板在设备管理器里显示黄色感叹号&#xff0c;提示“此设备无法启动&#xff08;代码10&#xff09;”&#xff0c;明明驱动已经装了、服务也注册了…

作者头像 李华
网站建设 2026/4/14 0:32:34

从零开始部署AI骨骼检测:33个关键点定位完整指南

从零开始部署AI骨骼检测&#xff1a;33个关键点定位完整指南 1. 引言&#xff1a;为什么需要高精度人体骨骼关键点检测&#xff1f; 在计算机视觉领域&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;是理解人类行为的基础技术之一。无论是健身动作分…

作者头像 李华
网站建设 2026/4/13 9:24:06

人体姿态估计应用:MediaPipe Pose在医疗中的使用

人体姿态估计应用&#xff1a;MediaPipe Pose在医疗中的使用 1. 引言&#xff1a;AI驱动的医疗康复新范式 随着人工智能技术在计算机视觉领域的深入发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;正逐步从实验室走向实际应用场景。尤其在医疗健…

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

DeepSeek-V2-Chat-0628:开源AI编码王者登榜!

DeepSeek-V2-Chat-0628&#xff1a;开源AI编码王者登榜&#xff01; 【免费下载链接】DeepSeek-V2-Chat-0628 DeepSeek-V2-Chat-0628&#xff0c;开源创新之作&#xff0c;AI聊天机器人性能卓越&#xff0c;编码能力出众。在LMSYS Chatbot Arena榜单脱颖而出&#xff0c;多项任…

作者头像 李华