golang 实现tcp server端和client端,并计算RTT时间

server端代码:

package main

import (
	"fmt"
	"net"
	"log"
	"os"
)

func main() {
	addr := "0.0.0.0:8787"
	tcpAddr, err := net.ResolveTCPAddr("tcp",addr)
	if err != nil {
			log.Fatalf("net.ResovleTCPAddr fail:%s", addr)   //等价于print err后,再os.Exit(1)
	}

	listener, err := net.ListenTCP("tcp", tcpAddr)
	if err != nil {
			log.Fatalf("listen %s fail: %s", addr, err)
	}else {

			log.Println("rpc listening", addr)
	}

	for {
			conn, err := listener.Accept()
			if err != nil {
					log.Println("listener.Accept error:", err)
					continue
			}

			go handle_Client(conn)
	}
}


func handle_Client(conn net.Conn) {
	defer conn.Close()

	var write_buffer []byte = []byte("ok")
	read_buffer := make([]byte, 128)

	n, err1 := conn.Read(read_buffer)
	if err1 != nil {
			fmt.Println("ser Read failed:", err1)
			os.Exit(1)
	}
	
	m, err2 := conn.Write(write_buffer)
	if err2 != nil {
			fmt.Println("ser send error:", err2)
			os.Exit(1)
	}

	fmt.Println("ser read cli send data count:", n, "msg:", string(read_buffer))
	fmt.Println("ser send data to cli count:", m, "msg:", string(write_buffer))
	
	fmt.Println("********one connetion end*********")
}

client端代码:

package main


import (
        "fmt"
        "net"
	    "os"
	    "time"
)

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:8787")
	if err != nil {
			fmt.Println("dial failed:", err)
			os.Exit(1)
	}
	defer conn.Close()


	var write_buffer []byte = []byte("Hi,server. I'm client.")
	read_buffer := make([]byte, 128)

	start_time := time.Now()
	n, err2 := conn.Write(write_buffer)
	if err2 != nil {
			fmt.Println("cli send error:", err2)
			os.Exit(1)
	}

	m, err1 := conn.Read(read_buffer)
	if err1 != nil {
			fmt.Println("cli Read failed:", err1)
			os.Exit(1)
	}
	response_time := time.Since(start_time)
	RTT_time := float64(response_time.Nanoseconds()) / 1e+06 //ns-->ms

	fmt.Println(RTT_time)

	fmt.Println("cli send data to ser count:", n, "msg:", string(write_buffer))	
	fmt.Println("cli read ser data count:", m, "msg:", string(read_buffer))
}
发布了70 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/YMY_mine/article/details/87720736
今日推荐