GO语言实现简单TCP服务的方法
本文向大家介绍GO语言实现简单TCP服务的方法,包括了GO语言实现简单TCP服务的方法的使用技巧和注意事项,需要的朋友参考一下
本文实例讲述了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语言程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#yiidian.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。