当前位置: 首页 » 产品 » 母婴用品 » 正文

golang之tcp自动重连如何实现

放大字体  缩小字体 发布日期: 2024-09-25 21:24   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:19
核心提示:操作系统: CentOS 6.9_x64go语言版本: 1.8.3问题描述现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳

操作系统: CentOS 6.9_x64

go语言版本: 1.8.3

问题描述

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

测试服务器示例代码:

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 + " ")) 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) } }

解决方案

package main import ( "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]# http://www.jsgho.com/help/fwq/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

 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站