golang 实现tcp server端和client端,并计算RTT时间操作
server端代码:
packagemain import( "fmt" "net" "log" "os" ) funcmain(){ addr:="0.0.0.0:8787" tcpAddr,err:=net.ResolveTCPAddr("tcp",addr) iferr!=nil{ log.Fatalf("net.ResovleTCPAddrfail:%s",addr)//等价于printerr后,再os.Exit(1) } listener,err:=net.ListenTCP("tcp",tcpAddr) iferr!=nil{ log.Fatalf("listen%sfail:%s",addr,err) }else{ log.Println("rpclistening",addr) } for{ conn,err:=listener.Accept() iferr!=nil{ log.Println("listener.Accepterror:",err) continue } gohandle_Client(conn) } } funchandle_Client(connnet.Conn){ deferconn.Close() varwrite_buffer[]byte=[]byte("ok") read_buffer:=make([]byte,128) n,err1:=conn.Read(read_buffer) iferr1!=nil{ fmt.Println("serReadfailed:",err1) os.Exit(1) } m,err2:=conn.Write(write_buffer) iferr2!=nil{ fmt.Println("sersenderror:",err2) os.Exit(1) } fmt.Println("serreadclisenddatacount:",n,"msg:",string(read_buffer)) fmt.Println("sersenddatatoclicount:",m,"msg:",string(write_buffer)) fmt.Println("********oneconnetionend*********") }
client端代码:
packagemain import( "fmt" "net" "os" "time" ) funcmain(){ conn,err:=net.Dial("tcp","127.0.0.1:8787") iferr!=nil{ fmt.Println("dialfailed:",err) os.Exit(1) } deferconn.Close() varwrite_buffer[]byte=[]byte("Hi,server.I'mclient.") read_buffer:=make([]byte,128) start_time:=time.Now() n,err2:=conn.Write(write_buffer) iferr2!=nil{ fmt.Println("clisenderror:",err2) os.Exit(1) } m,err1:=conn.Read(read_buffer) iferr1!=nil{ fmt.Println("cliReadfailed:",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("clisenddatatosercount:",n,"msg:",string(write_buffer)) fmt.Println("clireadserdatacount:",m,"msg:",string(read_buffer)) }
补充:go语言TCP服务器接受客户端字符串信息
我就废话不多说了,大家还是直接看代码吧~
funchand_conn(connnet.Conn)([]byte){ deferconn.Close() //clientarr:=conn.RemoteAddr()//获取连接到的对像的IP地址 result:=bytes.NewBuffer(nil) varbuf[512]byte for{ n,err:=conn.Read(buf[0:]) result.Write(buf[0:n]) iferr!=nil{ iferr==io.EOF{ break } } } //explan_rec_infos(string(result.Bytes())) returnresult.Bytes() } funcmain(){ fmt.Println("HelloWorld!goserver") server,err:=net.Listen("tcp",":9993") iferr==nil{//若果err为nil,则成功创建 index:=1 for{ index++ con,_:=server.Accept() fmt.Println("有一个客户连接",index) hand_conn(con) } }else{ return } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。