GO语言实现简单TCP服务的方法

2018-09-24 21:25

阅读:489

  本文实例讲述了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
}
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语言程序设计有所帮助。


评论


亲,登录后才可以留言!