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

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。