diff --git a/clients/golang/awesomeProject/main.go b/clients/golang/awesomeProject/main.go index 6ce0b5c..91bc497 100644 --- a/clients/golang/awesomeProject/main.go +++ b/clients/golang/awesomeProject/main.go @@ -191,25 +191,40 @@ func getNetworkStatus() { count := 0 conn1 , err1 := net.DialTimeout("tcp",CU_ADDR,defaulttimeout) if err1 != nil { - fmt.Println("Error try to connect China unicom :", err1) + fmt.Println("[getNetworkStatus]Error try to connect China unicom :", err1) count += 1 - return } - defer conn1.Close() + tcpconn1, ok := conn1.(*net.TCPConn) + if ok { + tcpconn1.SetLinger(0) + } + if conn1 != nil { + conn1.Close() + } conn2 , err2 := net.DialTimeout("tcp", CT_ADDR,defaulttimeout) if err2 != nil { - fmt.Println("Error try to connect China telecom :", err2) + fmt.Println("[getNetworkStatus]Error try to connect China telecom :", err2) count += 1 - return } - defer conn2.Close() + tcpconn2, ok := conn2.(*net.TCPConn) + if ok { + tcpconn2.SetLinger(0) + } + if conn2 != nil { + conn2.Close() + } conn3 , err3 := net.DialTimeout("tcp", CM_ADDR,defaulttimeout) if err3 != nil { - fmt.Println("Error try to connect China mobile :", err3) + fmt.Println("[getNetworkStatus]Error try to connect China mobile :", err3) count += 1 - return } - defer conn3.Close() + tcpconn3, ok := conn2.(*net.TCPConn) + if ok { + tcpconn3.SetLinger(0) + } + if conn3 != nil { + conn3.Close() + } if count >= 2 { clientInfo.IpStatus = false } else { @@ -281,9 +296,9 @@ func main() { pingValueCU = NewPingValue() pingValueCT = NewPingValue() pingValueCM = NewPingValue() - //pingValueCU.RunCU() - //pingValueCT.RunCT() - //pingValueCM.RunCM() + pingValueCU.RunCU() + pingValueCT.RunCT() + pingValueCM.RunCM() netSpeed.Run() for { var err error @@ -348,25 +363,23 @@ func main() { tupd() trafficCount() spaceCount() - //getNetworkStatus() + getNetworkStatus() netSpeed.Get() clientInfo.Ping10086, clientInfo.Time10086 = pingValueCM.Get() clientInfo.Ping189, clientInfo.Time189 = pingValueCT.Get() clientInfo.Ping10010, clientInfo.Time10010 = pingValueCU.Get() - //fmt.Println(clientInfo.Time10086) //结构体转json字符串 data, err := jsoniter.MarshalToString(&clientInfo) //fmt.Println(data) if err != nil { fmt.Println("Transformation Error: ", err) - return + break } info := "update " + data + "\n" - //fmt.Println(info) _ , err = mainConnect.Write(str2bytes(info)) if err != nil { fmt.Println("Error Sending Data Info:", err) - return + break } } } diff --git a/clients/golang/awesomeProject/ping.go b/clients/golang/awesomeProject/ping.go index a57e7f4..0d54597 100644 --- a/clients/golang/awesomeProject/ping.go +++ b/clients/golang/awesomeProject/ping.go @@ -28,6 +28,7 @@ func (pingValue *PingValue) RunCU() { t := time.NewTicker(t1) var lostPacket = 0 var allPacket = 0 + var lostConnect = false startTime := time.Now() defaulttimeout := 1 * time.Second for { @@ -40,19 +41,32 @@ func (pingValue *PingValue) RunCU() { t := time.Now() conn , err := net.DialTimeout("tcp",CU_ADDR,defaulttimeout) if err != nil { - fmt.Println("Error try to connect China unicom :", err) + fmt.Println("[ping]Error try to connect China unicom :", err) + lostConnect = true lostPacket += 1 - return } - defer conn.Close() + tcpconn, ok := conn.(*net.TCPConn) + if ok { + tcpconn.SetLinger(0) + } + if conn != nil { + conn.Close() + } diffTime := time.Since(t) //TODO:三网延迟和丢包率算法存在问题 //fmt.Println(diffTime) allPacket += 1 if allPacket > 100 { - pingValue.lostRate = float64(lostPacket/allPacket) + pingValue.lostRate = float64(lostPacket/allPacket) * 100 } - pingValue.ping = uint64(diffTime/time.Millisecond) + //fmt.Println("ALL LOST RATE") + //fmt.Printf("%10d %10d %10f\n",allPacket,lostPacket,pingValue.lostRate) + if lostConnect { + pingValue.ping = 0 + } else { + pingValue.ping = uint64(diffTime/time.Millisecond) + } + lostConnect = false resetTime := uint64(time.Since(startTime) / time.Second) if resetTime > 3600 { lostPacket = 0 @@ -71,6 +85,7 @@ func (pingValue *PingValue) RunCT() { t := time.NewTicker(t1) var lostPacket = 0 var allPacket = 0 + var lostConnect = false startTime := time.Now() defaulttimeout := 1 * time.Second for { @@ -83,17 +98,28 @@ func (pingValue *PingValue) RunCT() { t := time.Now() conn , err := net.DialTimeout("tcp",CT_ADDR,defaulttimeout) if err != nil { - fmt.Println("Error try to connect China Telecom :", err) + fmt.Println("[ping]Error try to connect China Telecom :", err) + lostConnect = true lostPacket += 1 - return } - defer conn.Close() + tcpconn, ok := conn.(*net.TCPConn) + if ok { + tcpconn.SetLinger(0) + } + if conn != nil { + conn.Close() + } diffTime := time.Since(t) allPacket += 1 if allPacket > 100 { - pingValue.lostRate = float64(lostPacket/allPacket) + pingValue.lostRate = float64(lostPacket/allPacket) * 100 } - pingValue.ping = uint64(diffTime/time.Millisecond) + if lostConnect { + pingValue.ping = 0 + } else { + pingValue.ping = uint64(diffTime/time.Millisecond) + } + lostConnect = false resetTime := uint64(time.Since(startTime) / time.Second) if resetTime > 3600 { lostPacket = 0 @@ -112,6 +138,7 @@ func (pingValue *PingValue) RunCM() { t := time.NewTicker(t1) var lostPacket = 0 var allPacket = 0 + var lostConnect = false startTime := time.Now() defaulttimeout := 1 * time.Second for { @@ -124,17 +151,28 @@ func (pingValue *PingValue) RunCM() { t := time.Now() conn , err := net.DialTimeout("tcp",CM_ADDR,defaulttimeout) if err != nil { - fmt.Println("Error try to connect China mobile :", err) + fmt.Println("[ping]Error try to connect China mobile :", err) + lostConnect = true lostPacket += 1 - return } - defer conn.Close() + tcpconn, ok := conn.(*net.TCPConn) + if ok { + tcpconn.SetLinger(0) + } + if conn != nil { + conn.Close() + } diffTime := time.Since(t) allPacket += 1 if allPacket > 100 { - pingValue.lostRate = float64(lostPacket/allPacket) + pingValue.lostRate = float64(lostPacket/allPacket) * 100 } - pingValue.ping = uint64(diffTime/time.Millisecond) + if lostConnect { + pingValue.ping = 0 + } else { + pingValue.ping = uint64(diffTime/time.Millisecond) + } + lostConnect = false resetTime := uint64(time.Since(startTime) / time.Second) if resetTime > 3600 { lostPacket = 0