欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GO語言實現(xiàn)簡單TCP服務(wù)的方法

 更新時間:2015年03月03日 09:36:43   作者:小小的我  
這篇文章主要介紹了GO語言實現(xiàn)簡單TCP服務(wù)的方法,實例分析了Go語言實現(xiàn)TCP服務(wù)的技巧,需要的朋友可以參考下

本文實例講述了GO語言實現(xiàn)簡單TCP服務(wù)的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:

復(fù)制代碼 代碼如下:

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語言程序設(shè)計有所幫助。

相關(guān)文章

  • 簡化Go開發(fā)提高生產(chǎn)力的強大工具及使用詳解

    簡化Go開發(fā)提高生產(chǎn)力的強大工具及使用詳解

    作為?Go?開發(fā)人員,應(yīng)該都知道維持簡潔高效開發(fā)工作流程的重要性,為了提高工作效率和代碼質(zhì)量,簡化開發(fā)流程并自動執(zhí)行重復(fù)性任務(wù)至關(guān)重要,在本文中,我們將探討一些強大的工具和技術(shù),它們將簡化?Go?開發(fā)過程,助力您的編碼之旅
    2023-10-10
  • Golang中關(guān)于defer的盲區(qū)梳理

    Golang中關(guān)于defer的盲區(qū)梳理

    關(guān)于Go中的defer,是做什么的?執(zhí)行順序是怎么樣的?相信學(xué)過Go語言的同學(xué),已經(jīng)不在陌生,今天就來講講其中需要掌握的幾個知識點,希望對大家有所幫助
    2023-03-03
  • Go并發(fā)控制Channel使用場景分析

    Go并發(fā)控制Channel使用場景分析

    使用channel來控制子協(xié)程的優(yōu)點是實現(xiàn)簡單,缺點是當需要大量創(chuàng)建協(xié)程時就需要有相同數(shù)量的channel,而且對于子協(xié)程繼續(xù)派生出來的協(xié)程不方便控制
    2021-07-07
  • GO語言基礎(chǔ)庫os包的函數(shù)全面解析

    GO語言基礎(chǔ)庫os包的函數(shù)全面解析

    這篇文章主要為大家介紹了GO語言基礎(chǔ)庫os包的函數(shù)全面解析, 有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Golang跨平臺GUI框架Fyne的使用教程詳解

    Golang跨平臺GUI框架Fyne的使用教程詳解

    Go 官方?jīng)]有提供標準的 GUI 框架,在 Go 實現(xiàn)的幾個 GUI 庫中,Fyne 算是最出色的,它有著簡潔的API、支持跨平臺能力,且高度可擴展,下面我們就來看看它的具體使用吧
    2024-03-03
  • golang中for循環(huán)遍歷channel時需要注意的問題詳解

    golang中for循環(huán)遍歷channel時需要注意的問題詳解

    這篇文章主要給大家介紹了關(guān)于golang中for循環(huán)遍歷channel時需要注意的問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Golang 中整數(shù)轉(zhuǎn)字符串的方法

    Golang 中整數(shù)轉(zhuǎn)字符串的方法

    這篇文章主要介紹了Golang 中整數(shù)轉(zhuǎn)字符串的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 淺談Golang的new與make區(qū)別是什么

    淺談Golang的new與make區(qū)別是什么

    本文主要介紹了Golang的new與make區(qū)別是什么,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Go?1.22版本新特性前瞻

    Go?1.22版本新特性前瞻

    這篇文章主要為大家介紹了Go?1.22版本新特性前瞻,包含語言的變化,編譯器、運行時與工具鏈等應(yīng)用對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go 實現(xiàn)HTTP中間人代理的操作

    Go 實現(xiàn)HTTP中間人代理的操作

    這篇文章主要介紹了Go 實現(xiàn)HTTP中間人代理的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論