下面小编就为大家带来一篇golang之tcp自动重连实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

操作系统: CentOS 6.9_x64

go语言版本: 1.8.3

问题描述

现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连。

测试服务器示例代码:/*

tcp server for test

*/

package main

import (

"fmt"

"net"

"os"

"strings"

"time"

)

func checkError(err error) {

if err != nil {

fmt.Println(err)

os.Exit(1)

}

}

func handleClient(conn net.Conn) {

conn.SetReadDeadline(time.Now().Add(3 * time.Minute))

request := make([]byte,1024)

defer conn.Close()

for {

recv_len,err := conn.Read(request)

if err != nil {

fmt.Println(err)

break

}

if recv_len == 0 {

break

}

recvData := strings.TrimSpace(string(request[:recv_len]))

fmt.Println("recv_len : ",recv_len)

fmt.Println("recv_data : " + recvData)

daytime := time.Now().String()

conn.Write([]byte(daytime + "\n"))

request = make([]byte,1024)

}

}

func main() {

bindInfo := ":12345"

tcpAddr,err := net.ResolveTCPAddr("tcp4",bindInfo)

checkError(err)

listener,err := net.ListenTCP("tcp",tcpAddr)

checkError(err)

for {

cc,err := listener.Accept()

if err != nil {

continue

}

go handleClient(cc)

}

}

解决方案/*

tcp client with reconnect

*/

package main

import (

"net"

"fmt"

"bufio"

"time"

)

func doTask(conn net.Conn) {

for {

fmt.Fprintf(conn,"test msg\n")

msg,err := bufio.NewReader(conn).ReadString('\n')

if err != nil {

fmt.Println("recv data error")

break

}else{

fmt.Println("recv msg : ",msg)

}

time.Sleep(1 * time.Second)

}

}

func main() {

hostInfo := "127.0.0.1:12345"

for {

conn,err := net.Dial("tcp",hostInfo)

fmt.Print("connect (",hostInfo)

if err != nil {

fmt.Println(") fail")

}else{

fmt.Println(") ok")

defer conn.Close()

doTask(conn)

}

time.Sleep(3 * time.Second)

}

}

运行效果:

[root@local t1]# ./tcpClient1

connect (127.0.0.1:12345) ok

recv msg : 2017-06-12 21:10:32.110977137 +0800 CST

recv msg : 2017-06-12 21:10:33.111868746 +0800 CST

recv data error

connect (127.0.0.1:12345) fail

connect (127.0.0.1:12345) fail

connect (127.0.0.1:12345) ok

recv msg : 2017-06-12 21:10:43.117203432 +0800 CST

recv msg : 2017-06-12 21:10:44.11853427 +0800 CST

讨论

这里只是个简单的示例代码,实现了tcp自动重连。

好,就这些了,希望对你有帮助。

python tcp实例_实现tcp的自动重连实例教程相关推荐

  1. 树莓派python实例_使用Python实现树莓派WiFi断线自动重连实例(附代码)

    实现 WiFi 断线自动重连,原理是用 Python 监测网络是否断线,如果断线则重启网络服务.接下来给大家分享实现代码,需要的朋友参考下 1.Python 代码 autowifi.py,放在 /ho ...

  2. python 监听tcp端口_创建TCP监听_创建TCP监听_功能示例_Python SDK示例_SDK 参考_开发指南_负载均衡 - 阿里云...

    # encoding=utf-8 import json import sys # 调用AcsClient参数进行身份验证 from aliyunsdkcore.client import AcsCl ...

  3. [Qt] TCP客户端与服务器断开连接自动重联机制

    TCP服务器断开连接自动重联机制 客户端加入定时器实现断线重联(客户端服务端代码见上一篇博客) 编译环境:Qt 5.9.5 ui界面如图: 代码如下 tcpclient.h #ifndef TCPCL ...

  4. aws 删除ec2实例_如何在AWS中启动EC2实例

    aws 删除ec2实例 你好朋友, 在本教程中,我们将看到如何立即在AWS中旋转EC2实例. 您应该有权访问AWS控制台.如果您还没有AWS账户,则可以单击此处并在AWS上创建免费套餐. 如何在AWS ...

  5. python下载文件并改名_Python 实现自动重命名网易云音乐下载文件

    网易云音乐 PC 版的下载文件都是按照 歌手名 - 歌曲名.mp3 的格式命名的,然而我比较喜欢直接以歌曲名作为文件名.手动一个一个文件改肯定是不行的,太 tm 蠢了(笑 以前我是用 shell 写的 ...

  6. tcp拥塞控制_网络TCP的拥塞控制算法简介

    作为网络中使用最广泛的传输协议,TCP的拥塞控制机制是学术界和工业界关注的焦点问题之.然而,目前广泛使用的TCP传输协议的拥塞控制算法仍然使用相对固定的窗口调节策略,无法根据动态变化的场景自适应地调整 ...

  7. java 断开tcp连接_处理TCP客户端断开连接

    我有这个简单的服务器,接受客户端的TCP套接字连接 . 尝试连接的每个客户端都使用新的Socket获取自己的 TCPConnectionHandler 实例 . 我不明白我该如何处理客户端断开连接 . ...

  8. 树莓派python实例_树莓派3 搭建 django 服务器的实例

    树莓派3的基本配置 这里接着上一章的搭建过程,在我新购置的树莓派3上完成一个网页服务器的搭建以及后台数据库的相关配置.关于树莓派的玩点实在是太多,限于篇幅不做展开.由于我们仅仅只是搭建一个服务器,所以 ...

  9. c++ tcp 封装_关于TCP三次握手和四次挥手问题,求你别再问了问了...

    少点代码,多点头发 三次握手建立链接,四次挥手断开链接.这个问题算非常经典的问题,也是面试官非常喜欢问的问题. 不夸张的说,龙叔在校招面试的时候每一家公司都问到过关于三次握手和四次挥手相关的问题,相信 ...

最新文章

  1. AD9910高速集成DDS芯片(芯片阅读笔记-串行模式篇-22个寄存器SPI通信周期控制)
  2. 中国人民银行:关于防范代币发行融资风险的公告
  3. DayDayUp:三观一致必将取代血缘关系,成为新的人际纽带(博主推荐文章)
  4. 2020——网鼎杯 (青龙组)signal
  5. Kali Linux安装Remmina无法加载RDP插件
  6. 安装oracle未生成tnsnames.ora文件
  7. ROS笔记(6) ROS通讯机制
  8. python语句可以采用交互式执行方式_怎么在Python交互式命令行中运行脚本?
  9. SpringSecurity系列(四) Spring Security 实现权限树形菜单
  10. 小管家进销存_管钱、管货、管顾客,“北漂”京东便利店主点赞掌柜管家
  11. 美团点评Java一二面过,三面“凉凉”~复习备战“金三春招季
  12. 应用宝ASO优化,应用宝ASO怎么优化
  13. 修改scrollbars的样式
  14. 有关计算机的英语作文一千字,关于网络的英语作文
  15. mac Matlab 运行一段时间后 崩溃 Matlab遇到一个内部错误,需要关闭
  16. mbk文件导入到oracle,Oracle基于物化视图的远程数据复制
  17. 三点水加一个必须的必
  18. android开发脚本之awk
  19. keepalived脚本健康检查
  20. 650c公路车推荐_菜鸟篇-公路自行车入门推荐及选购指南

热门文章

  1. “减压”成今年前十个月关键词:80后压力最大
  2. 输光200亿,利润暴跌77%!史上最“作死”老字号,还想靠天价翻身?
  3. 这又是什么新玩法?华为Mate 30 Pro真机谍照现身:音量键大变样
  4. 支付宝上线AR扫识别垃圾功能,十大“拎不清”垃圾令小姐姐捂脸
  5. 又栽了?苹果侵犯高通三项专利需赔偿3100万美元
  6. 苹果为提振销量疯狂试探!官网推出新福利:买买买更轻松
  7. 基于Linux和MiniGUI的嵌入式系统软件开发指南(六)
  8. 泡面比泡MM好的16个理由
  9. Flutter 踩坑 在bottomNavigationBar下显示bottomSheet
  10. html canvas blob image 污染源