操作系统: CentOS 6.9_x64

go语言版本: 1.8.3

问题描述

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

测试服务器示例代码:

/*
tcp server for test
E-Mail : Mike_Zhang@live.com
*/package mainimport ("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)}
}

View Code

解决方案

/*
tcp client with reconnect
E-Mail : Mike_Zhang@live.com
*/package mainimport ("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 CSTrecv msg :  2017-06-12 21:10:33.111868746 +0800 CSTrecv 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 CSTrecv msg :  2017-06-12 21:10:44.11853427 +0800 CST

讨论

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

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

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20170613_golang之tcp自动重连.rst

欢迎补充

转载于:https://www.cnblogs.com/MikeZhang/p/golangTcpReconnect20170613.html

golang之tcp自动重连相关推荐

  1. python socket自动重连_python之tcp自动重连

    在写一个传输文件的socket程序时,客户端实现了和服务端断开连接后重新自动连接功能,但是连接上服务端后再重启服务端,客户端出现了Errno 10054异常.出错的代码如下: client.py: i ...

  2. linux tcp自动重连,LabVIEW TCP/IP 断开重连问题

    LabVIEW的TCP/IP函数库非常好用,但是不恰当地设置打开连接结点的参数将带来一些问题,麻烦.如下图的打开连接的参数设置: 上图中指定了本地的端口,会发生这样的情况.当我们关闭应用程序之后,连接 ...

  3. python tcp实例_实现tcp的自动重连实例教程

    下面小编就为大家带来一篇golang之tcp自动重连实现方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 操作系统: CentOS 6.9_x64 go语言版本: 1 ...

  4. c语言linux TCP长连接 socket收发范例 断开自动重连

    原文链接:https://blog.csdn.net/chenhao0568/article/details/103420615 c语言linux TCP长连接 socket收发范例 断开自动重连 改 ...

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

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

  6. golang解决TCP粘包问题

    6行代码解决golang TCP粘包 转自:https://studygolang.com/articles/12483 什么是TCP粘包问题以及为什么会产生TCP粘包,本文不加讨论.本文使用gola ...

  7. 解读dbcp自动重连那些事---转载

    http://agapple.iteye.com/blog/791943 可以后另一篇做对比:http://agapple.iteye.com/blog/772507 同样的内容,不同的描述方式,不一 ...

  8. Python之Socket自动重连

    问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 服务端代码 #! /usr/bin/env python #-*- coding:utf-8 - ...

  9. 关于因和数据库库断开数据源没有自动重连变无效的问题

    转自 http://agapple.iteye.com/blog/791943 可以后另一篇做对比:http://agapple.iteye.com/blog/772507 同样的内容,不同的描述方式 ...

最新文章

  1. Pytorch中的向前计算(autograd)、梯度计算以及实现线性回归操作
  2. 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]
  3. 在Python中以扩展名.txt查找目录中的所有文件
  4. 集成IDE anaconda
  5. Python 阅读书目推荐
  6. Nginx反向代理为什么能够提升服务器性能?
  7. javascript 之数据类型--01
  8. [Usaco2007 Demo][BZOJ1628] City skyline
  9. c#爬虫-1688官网自动以图搜图
  10. 配置审计(Config)变配报警设置
  11. 怎么用git将本地代码上传到远程服务器_git之如何把本地文件上传到远程仓库的指定位置...
  12. opencv提供的带参数例程
  13. mysql指定库执行sql语句_对多个mysql的一部分库进行执行sql语句
  14. php 腾讯短信接口api,腾讯云短信发送功能API-PHP接入
  15. 2021白盒测试常用工具介绍【建议收藏】
  16. Windows系统自带图标位置
  17. AFD在CentOS环境中部署
  18. selenium/requess爬取京东手机商品的详细信息1~selenium练习版
  19. css中文字操超出固定个数显示省略... 超出隐藏
  20. 计算机简单易懂知识,如何选购电脑主板?小白装机简单易懂的电脑主板选购知识指南...

热门文章

  1. 框架less和sass
  2. 解决UICollectionViewCell/UITableViewCell因重用机制导致的错乱问题
  3. sshd被攻击的自动防御方法v2
  4. AspxTreeList获取选中项的值
  5. Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的适用版本
  6. Windows命令行(DOS命令)教程
  7. 用rz,sz命令在xshell传输文件
  8. 数据采集时总提示未登录_个税申报系统新功能!申报数据丢了也能找回!|税务局|个税|办税服务厅|纳税...
  9. 安装服务器选择什么系统盘,云服务器ecs选择什么系统盘
  10. Linux之内核调试sysrq