实现tcp的自动重连实例教程

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

操作系统: CentOS 6.9_x64

go语言版本: 1.8.3

问题描述

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

测试服务器示例代码:

/*tcp server for test*/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 + ""))    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 mainimport (  "net"  "fmt"  "bufio"  "time")func doTask(conn net.Conn) {  for {    fmt.Fprintf(conn,"test msg")    msg,err := bufio.NewReader(conn).ReadString('')    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]# ./tcpClient1connect (127.0.0.1:12345) okrecv msg : 2017-06-12 21:10:32.110977137 +0800 CSTrecv msg : 2017-06-12 21:10:33.111868746 +0800 CSTrecv data errorconnect (127.0.0.1:12345) failconnect (127.0.0.1:12345) failconnect (127.0.0.1:12345) okrecv msg : 2017-06-12 21:10:43.117203432 +0800 CSTrecv msg : 2017-06-12 21:10:44.11853427 +0800 CST

登录后复制

讨论

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

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

以上就是实现tcp的自动重连实例教程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2270760.html

(0)
上一篇 2025年2月27日 11:51:26
下一篇 2025年2月25日 14:36:03

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 详细介绍golang中的log模块

    下面小编就为大家带来一篇golang之log rotate详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 golang的lo…

    编程技术 2025年2月27日
    200
  • 新西兰计算机语言有哪些

    新西兰最常用的计算机语言包括:1. Python:高级语言,用于数据分析、机器学习和 Web 开发;2. Java:高级语言,用于企业应用和 Android 开发;3. C++:低级语言,用于高性能计算、游戏开发和操作系统;4. JavaS…

    2025年2月27日
    200
  • 详细介绍golang中defer的关键特性

    defer是golang语言中的关键字,用于资源的释放,会在函数返回之前进行调用。下面这篇文章主要给大家介绍了关于golang中defer的关键特性,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧…

    编程技术 2025年2月27日
    100
  • 实例讲解golang模拟实现带超时的信号量

    这篇文章主要给大家介绍了关于golang模拟实现带超时的信号量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。 前言 最近在写项目,需要用到信号量等待一些资源…

    编程技术 2025年2月27日
    200
  • Golang中参数传递方式方法

    参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,下面这篇文章主要给大家介绍了关于golang中参数传递的相关资料,需要的朋友可以参考下。 前言 本文主要给大家介绍了关于Gol…

    2025年2月27日
    200
  • Golang高并发代码分享

    今天领导问起为什么用golang,同事回答语法简单,语言新,支持高并发。那高并发到底如何实现,下面这篇文章主要给大家介绍了关于如何利用golang写出高并发代码的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看…

    编程技术 2025年2月27日
    200
  • 常用的高级编程语言有哪些

    高级编程语言是人类可读的,用于开发软件应用程序和脚本,提供更高的代码可读性、可维护性和可移植性。主流的高级编程语言包括:PythonJavaC++C#JavaScriptRubyGoSwiftKotlinR 常用的高级编程语言 高级编程语言…

    2025年2月27日
    200
  • 目前最流行的高级计算机语言

    最流行的高级计算机语言分别是:1. Python,用于网络开发、机器学习等;2. Java,用于企业应用程序、移动应用程序等;3. JavaScript,用于创建交互式网页;4. C++,用于操作系统、嵌入式系统等;5. C#,用于桌面应用…

    2025年2月27日
    200
  • golang和python有什么区别?

    golang和python有什么区别?下面本篇文章给大家对比一下python和golang,介绍一下golang和python的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 golang和python的区别 1、范…

    2025年2月26日
    200
  • Python如何实现UDP和TCP通信?

    1. UDP udp是一种无连接的、不可靠的传输协议,相比于tcp,udp具有数据传输速度快、传输延迟小等优点,但是不保证数据的可靠传输,需要应用层进行数据重传、校验等处理。 下面是一个简单的UDP发送示例代码: import socket…

    编程技术 2025年2月26日
    200

发表回复

登录后才能评论