最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言服務(wù)器開(kāi)發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法

 更新時(shí)間:2015年02月08日 12:17:08   作者:books1958  
這篇文章主要介紹了Go語(yǔ)言服務(wù)器開(kāi)發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法,實(shí)例分析了基于Go語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)易服務(wù)器的TCP客戶端與服務(wù)器端實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Go語(yǔ)言服務(wù)器開(kāi)發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

Go語(yǔ)言具備強(qiáng)大的服務(wù)器開(kāi)發(fā)支持,這里示范了最基礎(chǔ)的服務(wù)器開(kāi)發(fā):通過(guò)TCP協(xié)議實(shí)現(xiàn)客戶端與服務(wù)器的通訊。

一 服務(wù)端,為每個(gè)客戶端新開(kāi)一個(gè)goroutine

復(fù)制代碼 代碼如下:
func ServerBase() { 
    fmt.Println("Starting the server...") 
    //create listener 
    listener, err := net.Listen("tcp", "192.168.1.27:50000") 
    if err != nil { 
        fmt.Println("Error listening:", err.Error()) 
        return 
    } 
 
    // listen and accept connections from clients: 
    for { 
        conn, err := listener.Accept() 
        if err != nil { 
            fmt.Println("Error accepting:", err.Error()) 
            return 
        } 
        //create a goroutine for each request. 
        go doServerStuff(conn) 
    } 

 
func doServerStuff(conn net.Conn) { 
    fmt.Println("new connection:", conn.LocalAddr()) 
    for { 
        buf := make([]byte, 1024) 
        length, err := conn.Read(buf) 
        if err != nil { 
            fmt.Println("Error reading:", err.Error()) 
            return 
        } 
 
        fmt.Println("Receive data from client:", string(buf[:length])) 
    } 
}

二 客戶端 連接服務(wù)器,并發(fā)送數(shù)據(jù)

復(fù)制代碼 代碼如下:
func ClientBase() { 
    //open connection: 
    conn, err := net.Dial("tcp", "192.168.1.27:50000") 
    if err != nil { 
        fmt.Println("Error dial:", err.Error()) 
        return 
    } 
 
    inputReader := bufio.NewReader(os.Stdin) 
    fmt.Println("Please input your name:") 
    clientName, _ := inputReader.ReadString('\n') 
    inputClientName := strings.Trim(clientName, "\n") 
 
    //send info to server until Quit 
    for { 
        fmt.Println("What do you send to the server? Type Q to quit.") 
        content, _ := inputReader.ReadString('\n') 
        inputContent := strings.Trim(content, "\n") 
        if inputContent == "Q" { 
            return 
        } 
 
        _, err := conn.Write([]byte(inputClientName + " says " + inputContent)) 
        if err != nil { 
            fmt.Println("Error Write:", err.Error()) 
            return 
        } 
    } 
}

注:由于LiteIDE不支持同時(shí)運(yùn)行多個(gè)程序,所以需要在終端通過(guò) go run 命令來(lái)同時(shí)運(yùn)行服務(wù)端和(一個(gè)或多個(gè))客戶端,可觀察到服務(wù)器對(duì)并發(fā)訪問(wèn)的支持。

希望本文所述對(duì)大家的Go語(yǔ)言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • golang 設(shè)置web請(qǐng)求狀態(tài)碼操作

    golang 設(shè)置web請(qǐng)求狀態(tài)碼操作

    這篇文章主要介紹了golang 設(shè)置web請(qǐng)求狀態(tài)碼操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言fmt.Sprintf格式化輸出的語(yǔ)法與實(shí)例

    Go語(yǔ)言fmt.Sprintf格式化輸出的語(yǔ)法與實(shí)例

    Go 可以使用 fmt.Sprintf 來(lái)格式化字符串,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言fmt.Sprintf格式化輸出的語(yǔ)法與實(shí)例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 詳解如何通過(guò)Go來(lái)操作Redis實(shí)現(xiàn)簡(jiǎn)單的讀寫(xiě)操作

    詳解如何通過(guò)Go來(lái)操作Redis實(shí)現(xiàn)簡(jiǎn)單的讀寫(xiě)操作

    作為最常用的分布式緩存中間件——Redis,了解運(yùn)作原理和如何使用是十分有必要的,今天來(lái)學(xué)習(xí)如何通過(guò)Go來(lái)操作Redis實(shí)現(xiàn)基本的讀寫(xiě)操作,需要的朋友可以參考下
    2023-09-09
  • Go語(yǔ)言運(yùn)行環(huán)境安裝詳細(xì)教程

    Go語(yǔ)言運(yùn)行環(huán)境安裝詳細(xì)教程

    這篇文章主要介紹了Go語(yǔ)言運(yùn)行環(huán)境安裝詳細(xì)教程,本文講解了Linux、MAC OS、Windows下的安裝方法,同時(shí)講解了驗(yàn)證是否安裝成功、第三方工具安裝運(yùn)行環(huán)境的方法,需要的朋友可以參考下
    2014-10-10
  • Go素?cái)?shù)篩選分析詳解

    Go素?cái)?shù)篩選分析詳解

    學(xué)習(xí)Go語(yǔ)言的過(guò)程中,遇到素?cái)?shù)篩選的問(wèn)題。這是一個(gè)經(jīng)典的并發(fā)編程問(wèn)題,是某大佬的代碼,短短幾行代碼就實(shí)現(xiàn)了素?cái)?shù)篩選,這篇文章主要介紹了Go素?cái)?shù)篩選分析,需要的朋友可以參考下
    2022-10-10
  • golang中protobuf的使用詳解

    golang中protobuf的使用詳解

    protobuf是Google公司提出的一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,常用于結(jié)構(gòu)化數(shù)據(jù)的序列化,具有語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展性特性,常用于通訊協(xié)議、服務(wù)端數(shù)據(jù)交換場(chǎng)景,下面我們就來(lái)看看golang中protobuf的具體使用吧
    2023-10-10
  • go通過(guò)編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟

    go通過(guò)編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟

    這篇文章主要為大家介紹了go通過(guò)編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語(yǔ)言入門教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié)

    Go語(yǔ)言入門教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié)

    這篇文章主要介紹了Go語(yǔ)言入門教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié),本文直接給出操作代碼,同時(shí)對(duì)代碼加上了詳細(xì)注釋,需要的朋友可以參考下
    2014-11-11
  • Go語(yǔ)言繼承功能使用結(jié)構(gòu)體實(shí)現(xiàn)代碼重用

    Go語(yǔ)言繼承功能使用結(jié)構(gòu)體實(shí)現(xiàn)代碼重用

    今天我來(lái)給大家介紹一下在?Go?語(yǔ)言中如何實(shí)現(xiàn)類似于繼承的功能,讓我們的代碼更加簡(jiǎn)潔和可重用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go語(yǔ)言題解LeetCode1160拼寫(xiě)單詞示例詳解

    go語(yǔ)言題解LeetCode1160拼寫(xiě)單詞示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode1160拼寫(xiě)單詞示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

措美县| 梧州市| 乌什县| 拉孜县| 成都市| 利川市| 太保市| 锦州市| 理塘县| 卢氏县| 怀来县| 嘉祥县| 大石桥市| 长宁区| 建德市| 航空| 尼玛县| 通河县| 枣阳市| 云阳县| 察哈| 防城港市| 溧水县| 白水县| 黄龙县| 双柏县| 疏勒县| 余庆县| 永登县| 富顺县| 柳河县| 齐齐哈尔市| 旺苍县| 定陶县| 德江县| 泰和县| 达拉特旗| 天津市| 古交市| 南丹县| 肃宁县|