Python TCP客户端自动重连实现方案

不晚
不晚
发布时间:2026-10-11 | 2人浏览过
原创

本文介绍如何使用Python实现TCP客户端的自动重连功能。针对网络不稳定导致的连接中断问题,通过封装socket连接逻辑并在主循环中捕获异常,实现断线后的自动恢复。文章提供了完整的Python 2.7代码示例及运行日志,展示了从连接、发送数据到异常处理及重连的完整流程,适用于需要定期从服务器获取数据的场景。

实现背景与目标

在开发定期从服务器获取数据的TCP客户端程序时,网络波动可能导致连接意外断开。为了保证数据的持续获取,客户端需要具备自动检测断线并重新建立连接的能力。本文基于CentOS 6.9_x64操作系统和Python 2.7.13环境,展示一种简单的TCP自动重连实现方案。

核心代码逻辑

实现自动重连的关键在于将连接逻辑封装为独立函数,并在主循环中通过异常处理机制触发重连。以下是完整的Python代码示例:

'''tcp client with reconnectE-Mail : Mike_Zhang@live.com'''

#! /usr/bin/env python
#-*- coding:utf-8 -*-

import os,sys,time
import socket

def doConnect(host,port):
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  try :
    sock.connect((host,port))
  except :
    pass
  return sock

def main():
  host,port = "127.0.0.1",12345
  print host,port
  sockLocal = doConnect(host,port)

  while True :
    try:
      msg = str(time.time())
      sockLocal.send(msg)
      print "send msg ok : ",msg
      print "recv data :",sockLocal.recv(1024)
    except socket.error :
      print "\r\nsocket error,do reconnect "
      time.sleep(3)
      sockLocal = doConnect(host,port)
    except :
      print '\r\nother error occur '
      time.sleep(3)
    time.sleep(1)

if __name__ == "__main__" :
  main()

代码解析

  • 连接封装:doConnect函数负责创建socket并尝试连接指定主机和端口。如果连接失败,函数静默处理异常并返回socket对象(此时连接可能未建立成功,后续操作会触发异常)。
  • 主循环:在main函数中,程序不断发送当前时间戳并接收服务器响应。
  • 异常处理:当发生socket.error时,程序打印错误信息,等待3秒后调用doConnect重新建立连接。其他异常也会触发等待和重连尝试。
  • 定时发送:每次发送后等待1秒,实现定期数据获取。

运行效果验证

通过运行上述代码,可以观察到客户端在正常连接时持续发送和接收数据。当网络中断导致连接失败时,程序会捕获异常并自动重连。以下是典型的运行日志输出:

(py27env) [root@local t1]# python tcpClient1_reconnect.py
127.0.0.1 12345
send msg ok : 1498891374.98
recv data : 1498891374.98
send msg ok : 1498891375.98
recv data : 1498891375.98
send msg ok : 1498891376.98
recv data :

socket error,do reconnect
send msg ok : 1498891381.99
recv data : 1498891381.99
send msg ok : 1498891382.99
recv data : 1498891382.99

从日志可以看出,在发生socket error后,程序经过短暂等待重新建立了连接,并继续正常收发数据。这验证了自动重连机制的有效性。

注意事项

  • 该示例基于Python 2.7编写,若使用Python 3,需注意print语句的语法差异(需改为函数调用)。
  • 生产环境中建议增加更详细的日志记录、连接超时设置以及重连次数限制,以避免无限重试消耗资源。
  • 代码中doConnect函数在连接失败时仍返回socket对象,后续操作会抛出异常。这种设计简化了逻辑,但实际应用中可根据需求优化错误处理策略。

以上就是使用Python实现TCP自动重连的详细内容,更多关于Python网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表