国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Go語(yǔ)言網(wǎng)絡(luò)編程(socket編程)TCP

這篇具有很好參考價(jià)值的文章主要介紹了Go語(yǔ)言網(wǎng)絡(luò)編程(socket編程)TCP。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、TCP編程

1.1.1 Go語(yǔ)言實(shí)現(xiàn)TCP通信

TCP協(xié)議
TCP/IP(Transmission Control Protocol/Internet Protocol) 即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的傳輸層(Transport layer)通信協(xié)議,因?yàn)槭敲嫦蜻B接的協(xié)議,數(shù)據(jù)像水流一樣傳輸,會(huì)存在黏包問(wèn)題。

TCP服務(wù)端
一個(gè)TCP服務(wù)端可以同時(shí)連接很多個(gè)客戶端,例如世界各地的用戶使用自己電腦上的瀏覽器訪問(wèn)淘寶網(wǎng)。因?yàn)镚o語(yǔ)言中創(chuàng)建多個(gè)goroutine實(shí)現(xiàn)并發(fā)非常方便和高效,所以我們可以每建立一次鏈接就創(chuàng)建一個(gè)goroutine去處理。

TCP服務(wù)端程序的處理流程:

1.監(jiān)聽(tīng)端口
2.接收客戶端請(qǐng)求建立鏈接
3.創(chuàng)建goroutine處理鏈接。

我們使用Go語(yǔ)言的net包實(shí)現(xiàn)的TCP服務(wù)端代碼如下:

// tcp/server/main.go

// TCP server端

// 處理函數(shù)
func process(conn net.Conn) {
    defer conn.Close() // 關(guān)閉連接
    for {
        reader := bufio.NewReader(conn)
        var buf [128]byte
        n, err := reader.Read(buf[:]) // 讀取數(shù)據(jù)
        if err != nil {
            fmt.Println("read from client failed, err:", err)
            break
        }
        recvStr := string(buf[:n])
        fmt.Println("收到client端發(fā)來(lái)的數(shù)據(jù):", recvStr)
        conn.Write([]byte(recvStr)) // 發(fā)送數(shù)據(jù)
    }
}

func main() {
    listen, err := net.Listen("tcp", "127.0.0.1:20000")
    if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }
    for {
        conn, err := listen.Accept() // 建立連接
        if err != nil {
            fmt.Println("accept failed, err:", err)
            continue
        }
        go process(conn) // 啟動(dòng)一個(gè)goroutine處理連接
    }
}

將上面的代碼保存之后編譯成server或server.exe可執(zhí)行文件。

TCP客戶端
一個(gè)TCP客戶端進(jìn)行TCP通信的流程如下:

1.建立與服務(wù)端的鏈接
2.進(jìn)行數(shù)據(jù)收發(fā)
3.關(guān)閉鏈接

使用Go語(yǔ)言的net包實(shí)現(xiàn)的TCP客戶端代碼如下:

// tcp/client/main.go

// 客戶端
func main() {
    conn, err := net.Dial("tcp", "127.0.0.1:20000")
    if err != nil {
        fmt.Println("err :", err)
        return
    }
    defer conn.Close() // 關(guān)閉連接
    inputReader := bufio.NewReader(os.Stdin)
    for {
        input, _ := inputReader.ReadString('\n') // 讀取用戶輸入
        inputInfo := strings.Trim(input, "\r\n")
        if strings.ToUpper(inputInfo) == "Q" { // 如果輸入q就退出
            return
        }
        _, err = conn.Write([]byte(inputInfo)) // 發(fā)送數(shù)據(jù)
        if err != nil {
            return
        }
        buf := [512]byte{}
        n, err := conn.Read(buf[:])
        if err != nil {
            fmt.Println("recv failed, err:", err)
            return
        }
        fmt.Println(string(buf[:n]))
    }
}

將上面的代碼編譯成client或client.exe可執(zhí)行文件,先啟動(dòng)server端再啟動(dòng)client端,在client端輸入任意內(nèi)容回車(chē)之后就能夠在server端看到client端發(fā)送的數(shù)據(jù),從而實(shí)現(xiàn)TCP通信。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-701772.html

到了這里,關(guān)于Go語(yǔ)言網(wǎng)絡(luò)編程(socket編程)TCP的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Go語(yǔ)言實(shí)戰(zhàn):網(wǎng)絡(luò)編程與TCP_UDP

    Go語(yǔ)言是一種現(xiàn)代的編程語(yǔ)言,由Google的Robert Griesemer、Rob Pike和Ken Thompson于2009年開(kāi)發(fā)。Go語(yǔ)言的設(shè)計(jì)目標(biāo)是簡(jiǎn)單、高效、可擴(kuò)展和易于使用。它具有垃圾回收、類(lèi)型安全、并發(fā)性能等優(yōu)點(diǎn)。Go語(yǔ)言的網(wǎng)絡(luò)編程庫(kù) net 包提供了TCP/UDP的實(shí)現(xiàn),使得開(kāi)發(fā)者可以輕松地編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序

    2024年02月21日
    瀏覽(96)
  • Go語(yǔ)言網(wǎng)絡(luò)編程入門(mén):TCP、HTTP、JSON序列化、Gin、WebSocket、RPC、gRPC示例

    Go語(yǔ)言網(wǎng)絡(luò)編程入門(mén):TCP、HTTP、JSON序列化、Gin、WebSocket、RPC、gRPC示例

    在本文中,我們將介紹Go語(yǔ)言中的網(wǎng)絡(luò)編程的不同方式,包括TCP、HTTP、Gin框架、WebSocket、RPC、gRPC的介紹與連接實(shí)例,并對(duì)所有示例代碼都給出了詳細(xì)的注釋,最后對(duì)每種模式進(jìn)行了總結(jié)。 TCP(傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,提供

    2024年02月16日
    瀏覽(28)
  • Go語(yǔ)言TCP Socket編程

    Golang的主要 設(shè)計(jì)目標(biāo)之一就是面向大規(guī)模后端服務(wù)程序,網(wǎng)絡(luò)通信這塊是服務(wù)端 程序必不可少也是至關(guān)重要的一部分。在日常應(yīng)用中,我們也可以看到Go中的net以及其subdirectories下的包均是“高頻+剛需”,而TCP socket則是網(wǎng)絡(luò)編程的主流,即便您沒(méi)有直接使用到net中有關(guān)TCP

    2024年02月15日
    瀏覽(21)
  • GO語(yǔ)言網(wǎng)絡(luò)編程(并發(fā)編程)Channel

    GO語(yǔ)言網(wǎng)絡(luò)編程(并發(fā)編程)Channel

    1.1.1 Channel 單純地將函數(shù)并發(fā)執(zhí)行是沒(méi)有意義的。函數(shù)與函數(shù)間需要交換數(shù)據(jù)才能體現(xiàn)并發(fā)執(zhí)行函數(shù)的意義。 雖然可以使用共享內(nèi)存進(jìn)行數(shù)據(jù)交換,但是共享內(nèi)存在不同的goroutine中容易發(fā)生競(jìng)態(tài)問(wèn)題。為了保證數(shù)據(jù)交換的正確性,必須使用互斥量對(duì)內(nèi)存進(jìn)行加鎖,這種做法勢(shì)

    2024年02月09日
    瀏覽(105)
  • GO語(yǔ)言網(wǎng)絡(luò)編程(并發(fā)編程)select

    1.1.1 select多路復(fù)用 在某些場(chǎng)景下我們需要同時(shí)從多個(gè)通道接收數(shù)據(jù)。通道在接收數(shù)據(jù)時(shí),如果沒(méi)有數(shù)據(jù)可以接收將會(huì)發(fā)生阻塞。你也許會(huì)寫(xiě)出如下代碼使用遍歷的方式來(lái)實(shí)現(xiàn): 這種方式雖然可以實(shí)現(xiàn)從多個(gè)通道接收值的需求,但是運(yùn)行性能會(huì)差很多。為了應(yīng)對(duì)這種場(chǎng)景,G

    2024年02月09日
    瀏覽(240)
  • GO語(yǔ)言網(wǎng)絡(luò)編程(并發(fā)編程)runtime包

    1.1.1. runtime.Gosched() 讓出CPU時(shí)間片,重新等待安排任務(wù)(大概意思就是本來(lái)計(jì)劃的好好的周末出去燒烤,但是你媽讓你去相親,兩種情況第一就是你相親速度非常快,見(jiàn)面就黃不耽誤你繼續(xù)燒烤,第二種情況就是你相親速度特別慢,見(jiàn)面就是你儂我儂的,耽誤了燒烤,但是還饞就

    2024年02月09日
    瀏覽(122)
  • GO語(yǔ)言網(wǎng)絡(luò)編程(并發(fā)編程)并發(fā)介紹,Goroutine

    GO語(yǔ)言網(wǎng)絡(luò)編程(并發(fā)編程)并發(fā)介紹,Goroutine

    進(jìn)程和線程 并發(fā)和并行 協(xié)程和線程 協(xié)程:獨(dú)立的棧空間,共享堆空間,調(diào)度由用戶自己控制,本質(zhì)上有點(diǎn)類(lèi)似于用戶級(jí)線程,這些用戶級(jí)線程的調(diào)度也是自己實(shí)現(xiàn)的。 線程:一個(gè)線程上可以跑多個(gè)協(xié)程,協(xié)程是輕量級(jí)的線程。 goroutine 只是由官方實(shí)現(xiàn)的超級(jí)\\\"線程池\\\"。 每個(gè)

    2024年02月09日
    瀏覽(92)
  • Go語(yǔ)言網(wǎng)絡(luò)編程介紹以及案例運(yùn)用

    1. 基本概念 TCP 和 UDP : Go語(yǔ)言支持TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。TCP提供可靠的、面向連接的通信,而UDP提供無(wú)連接的快速數(shù)據(jù)傳輸。 并發(fā) : Go語(yǔ)言的并發(fā)模型是通過(guò)goroutines實(shí)現(xiàn)的。每個(gè)網(wǎng)絡(luò)請(qǐng)求都可以在自己的goroutine中處理,實(shí)現(xiàn)高效的并發(fā)。 Channels : 用于

    2024年01月25日
    瀏覽(105)
  • Go語(yǔ)言的網(wǎng)絡(luò)編程與HTTP服務(wù)

    Go語(yǔ)言(Golang)是Google開(kāi)發(fā)的一種靜態(tài)類(lèi)型、垃圾回收、并發(fā)簡(jiǎn)單的編程語(yǔ)言。Go語(yǔ)言的設(shè)計(jì)目標(biāo)是讓程序員更容易編寫(xiě)并發(fā)程序,并在多核處理器上充分發(fā)揮性能。Go語(yǔ)言的網(wǎng)絡(luò)編程和HTTP服務(wù)是其核心功能之一,可以輕松地構(gòu)建高性能、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用程序。 在本文中,我們

    2024年02月19日
    瀏覽(100)
  • 【socket】從計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)到socket編程——Windows && Linux C語(yǔ)言 + Python實(shí)現(xiàn)(TCP+UDP)

    【socket】從計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)到socket編程——Windows && Linux C語(yǔ)言 + Python實(shí)現(xiàn)(TCP+UDP)

    簡(jiǎn)單講一下基礎(chǔ)知識(shí),便于后面代碼的理解,建議大概瀏覽一下這一小節(jié)內(nèi)容。這里講的只是冰山一角,建議大家學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)知識(shí),推薦幾本書(shū): 《計(jì)算機(jī)網(wǎng)絡(luò)》(謝希仁) 《計(jì)算機(jī)網(wǎng)絡(luò) 自頂向下方法》 《計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)》 《計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)及應(yīng)用》 《Linux C從入

    2024年02月08日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包