第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

go中的套接字回顯服務(wù)器

go中的套接字回顯服務(wù)器

Go
開(kāi)心每一天1111 2021-06-02 21:23:09
我正在嘗試在 go 中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的套接字回顯服務(wù)器,這是代碼:package mainimport (    "fmt"    "net"    "sync")func echo_srv(c net.Conn, wg sync.WaitGroup) {    defer c.Close()    defer wg.Done()    for {            var msg []byte            n, err := c.Read(msg)            if err != nil {                    fmt.Printf("ERROR: read\n")                    fmt.Print(err)                    return            }            fmt.Printf("SERVER: received %v bytes\n", n)            n, err = c.Write(msg)            if err != nil {                    fmt.Printf("ERROR: write\n")                    fmt.Print(err)                    return            }            fmt.Printf("SERVER: sent %v bytes\n", n)    }}func main() {    var wg sync.WaitGroup    ln, err := net.Listen("unix", "./sock_srv")    if err != nil {            fmt.Print(err)            return    }    defer ln.Close()    conn, err := ln.Accept()    if err != nil {            fmt.Print(err)            return    }    wg.Add(1)    go echo_srv(conn, wg)    wg.Wait()}出于某種原因,一旦客戶端連接, c.Read() 不會(huì)阻止并打印錯(cuò)誤消息。所以,我的第一個(gè)問(wèn)題是:在客戶端向套接字發(fā)送某些內(nèi)容之前,不應(yīng)該阻止 c.Read() 嗎?第二:打印錯(cuò)誤消息后,服務(wù)器不會(huì)終止。這是我在 gdb 中執(zhí)行程序時(shí)看到的:(gdb) run                                                                    Starting program: src/sockets/server/server                                  warning: Could not load shared library symbols for linux-vdso.so.1.          Do you need "set solib-search-path" or "set sysroot"?                        [Thread debugging using libthread_db enabled]                                Using host libthread_db library "/usr/lib/libthread_db.so.1".                [New Thread 0x7fffe7806700 (LWP 28594)]                                      [New Thread 0x7fffe7005700 (LWP 28595)]                                      ERROR: read                                                                  EOF^C                                                                        我在 Python 和 C 中有類似的回聲服務(wù)器,它們工作正常。為了完整起見(jiàn),我還在下面發(fā)布了套接字客戶端應(yīng)用程序(它適用于我的 C 和 Python 服務(wù)器)。
查看完整描述

2 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

這是一個(gè)echo_srv為你工作。你也需要@jnml 的建議!


實(shí)際上分配一些緩沖區(qū)來(lái)接收 - 你做了一個(gè) 0 字節(jié)的緩沖區(qū)!

在EOF上整齊地退出

只寫收到的字節(jié) msg[:n]


func echo_srv(c net.Conn, wg *sync.WaitGroup) {

    defer c.Close()

    defer wg.Done()


    for {

        msg := make([]byte, 1000)


        n, err := c.Read(msg)

        if err == io.EOF {

            fmt.Printf("SERVER: received EOF (%d bytes ignored)\n", n)

            return

        } else  if err != nil {

            fmt.Printf("ERROR: read\n")

            fmt.Print(err)

            return

        }

        fmt.Printf("SERVER: received %v bytes\n", n)


        n, err = c.Write(msg[:n])

        if err != nil {

            fmt.Printf("ERROR: write\n")

            fmt.Print(err)

            return

        }

        fmt.Printf("SERVER: sent %v bytes\n", n)

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-06-21
?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊

我沒(méi)有檢查它是否是罪魁禍?zhǔn)?,但在“技術(shù)分析”方面,我注意到您的代碼中有一個(gè)錯(cuò)誤:您將 a 的副本傳遞sync.Workgroup給echo_srv. 對(duì)副本所做的任何更改對(duì)原始實(shí)例都無(wú)效。


將簽名更改echo為:


func echo_srv(c net.Conn, wg *sync.WaitGroup)

然后像這樣調(diào)用它:


go echo_srv(conn, &wg)

附帶說(shuō)明:_在慣用的 Go 代碼名稱中間不使用下劃線 ( )。慣用名稱將是例如。echoSrv反而。


查看完整回答
反對(duì) 回復(fù) 2021-06-21
  • 2 回答
  • 0 關(guān)注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)