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
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。