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