GO语言实现简单TCP服务的方法
发布时间:2020-12-16 19:34:20 所属栏目:大数据 来源:网络整理
导读:本篇章节讲解GO语言实现简单TCP服务的方法。供大家参考研究。具体实现方法如下: 复制代码 代码如下: package main import ( "net" "fmt" ) var ( maxRead = 1100 msgStop = []byte("cmdStop") msgStart = []byte("cmdContinue") ) func main() { ho
本篇章节讲解GO语言实现简单TCP服务的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下: package main import ( "net" "fmt" ) var ( maxRead = 1100 msgStop = []byte("cmdStop") msgStart = []byte("cmdContinue") ) func main() { hostAndPort := "localhost:54321" listener := initServer(hostAndPort) for { conn,err := listener.Accept() checkError(err,"Accept: ") go connectionHandler(conn) } } func initServer(hostAndPort string) *net.TCPListener { serverAddr,err := net.ResolveTCPAddr("tcp",hostAndPort) checkError(err,"Resolving address:port failed: '" + hostAndPort + "'") listener,err := net.ListenTCP("tcp",serverAddr) checkError(err,"ListenTCP: ") println("Listening to: ",listener.Addr().String()) return listener } func connectionHandler(conn net.Conn) { connFrom := conn.RemoteAddr().String() println("Connection from: ",connFrom) talktoclients(conn) for { var ibuf []byte = make([]byte,maxRead + 1) length,err := conn.Read(ibuf[0:maxRead]) ibuf[maxRead] = 0 // to prevent overflow switch err { case nil: handleMsg(length,err,ibuf) default: goto DISCONNECT } } DISCONNECT: err := conn.Close() println("Closed connection:",connFrom) checkError(err,"Close:" ) } func talktoclients(to net.Conn) { wrote,err := to.Write(msgStart) checkError(err,"Write: wrote " + string(wrote) + " bytes.") } func handleMsg(length int,err error,msg []byte) { if length > 0 { for i := 0; ; i++ { if msg[i] == 0 { break } } fmt.Printf("Received data: %v",string(msg[0:length])) fmt.Println(" length:",length) } } func checkError(error error,info string) { if error != nil { panic("ERROR: " + info + " " + error.Error()) // terminate program } } 希望本文所述对大家的Go语言程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |