GO语言实现简单TCP服务的方法
本文实例讲述了GO语言实现简单TCP服务的方法。分享给大家供大家参考。具体实现方法如下:
packagemain
import(
"net"
"fmt"
)
var( maxRead=1100
msgStop =[]byte("cmdStop")
msgStart =[]byte("cmdContinue")
)
funcmain(){
hostAndPort:="localhost:54321"
listener:=initServer(hostAndPort)
for{
conn,err:=listener.Accept()
checkError(err,"Accept:")
goconnectionHandler(conn)
}
}
funcinitServer(hostAndPortstring)*net.TCPListener{
serverAddr,err:=net.ResolveTCPAddr("tcp",hostAndPort)
checkError(err,"Resolvingaddress:portfailed:'"+hostAndPort+"'")
listener,err:=net.ListenTCP("tcp",serverAddr)
checkError(err,"ListenTCP:")
println("Listeningto:",listener.Addr().String())
returnlistener
}
funcconnectionHandler(connnet.Conn){
connFrom:=conn.RemoteAddr().String()
println("Connectionfrom:",connFrom)
talktoclients(conn)
for{
varibuf[]byte=make([]byte,maxRead+1)
length,err:=conn.Read(ibuf[0:maxRead])
ibuf[maxRead]=0//topreventoverflow
switcherr{
casenil:
handleMsg(length,err,ibuf)
default:
gotoDISCONNECT
}
}
DISCONNECT:
err:=conn.Close()
println("Closedconnection:",connFrom)
checkError(err,"Close:")
}
functalktoclients(tonet.Conn){
wrote,err:=to.Write(msgStart)
checkError(err,"Write:wrote"+string(wrote)+"bytes.")
}
funchandleMsg(lengthint,errerror,msg[]byte){
iflength>0{
fori:=0;;i++{
ifmsg[i]==0{
break
}
}
fmt.Printf("Receiveddata:%v",string(msg[0:length]))
fmt.Println(" length:",length)
}
}
funccheckError(errorerror,infostring){
iferror!=nil{
panic("ERROR:"+info+""+error.Error())//terminateprogram
}
}
希望本文所述对大家的Go语言程序设计有所帮助。