本文实例讲述了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语言程序设计有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。