这里有新鲜出炉的Python多线程编程,程序狗速度看过来!
Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
下面小编就为大家带来一篇使用python实现tcp自动重连实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
操作系统: CentOS 6.9_x64
python语言版本: 2.7.13
问题描述
现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连。
测试服务器示例代码:
https://github.com/mike-zhang/pyExamples/blob/master/socketRelate/tcpServer1_multithread.py
解决方案
- '''
- tcp client with reconnect
- E-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()
运行效果:
- (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
讨论
这里只是个简单的示例代码,实现了python的tcp自动重连。
来源: http://www.phperz.com/article/17/1020/351295.html