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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。