• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论

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

操作系统: 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 + "\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 mainimport (  "net"  "fmt"  "bufio<i>本文来源gaodai$ma#com搞$代*码网2</i>"  "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]# ./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的自动重连实例教程的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:实现tcp的自动重连实例教程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址