国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

golang之tcp自動重連實現方法

2020-04-01 19:05:20
字體:
來源:轉載
供稿:網友

操作系統: 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"  "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自動重連。

好,就這些了,希望對你有幫助。

以上這篇golang之tcp自動重連實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙洋县| 岢岚县| 鄄城县| 淳安县| 诏安县| 冷水江市| 方城县| 重庆市| 随州市| 天门市| 周口市| 咸阳市| 古交市| 五河县| 扎赉特旗| 钦州市| 阳城县| 高雄县| 镇原县| 隆昌县| 满洲里市| 彰武县| 永新县| 平远县| 拉孜县| 法库县| 嘉禾县| 铜梁县| 祁东县| 阿荣旗| 阜阳市| 舞阳县| 汨罗市| 孟州市| 竹山县| 延川县| 瓦房店市| 色达县| 集贤县| 日照市| 古蔺县|