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

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

GO:為什么從客戶(hù)端偵聽(tīng)的地址撥號(hào)不起作用,而相反呢?

GO:為什么從客戶(hù)端偵聽(tīng)的地址撥號(hào)不起作用,而相反呢?

Go
江戶(hù)川亂折騰 2021-12-06 19:48:46
我想知道為什么從客戶(hù)端也在偵聽(tīng)的地址撥號(hào)不起作用(Version A)但偵聽(tīng)客戶(hù)端撥號(hào)到服務(wù)器的連接地址實(shí)際上有效(Version B)?!誰(shuí)可以給我解釋一下這個(gè)。Go對(duì)我來(lái)說(shuō)是新的,我仍然在學(xué)習(xí)很多東西。下面是一個(gè)例子:服務(wù)器程序:package mainimport . "fmt"import "net"import "os"func main() {    Println("server")    var listener, listenerError = net.Listen("tcp", "localhost:8080")    if listenerError != nil {        Println(listenerError)        os.Exit(1)    }    for {        con, _ := listener.Accept() // I don't care about the error in this example        Printf("LocalAddr: %v\n", con.LocalAddr())        Printf("RemoteAddr: %v\n", con.RemoteAddr())    }}客戶(hù)端版本 A(不工作):package mainimport "net"import . "fmt"import "os"func main() {    var listener, listenerError = net.Listen("tcp", "localhost:0")    if listenerError != nil {        Println(listenerError)        os.Exit(1)    }    var dialer = new(net.Dialer)    dialer.LocalAddr = listener.Addr()    con, err := dialer.Dial("tcp", "localhost:8080")    if err != nil {        // dial tcp 127.0.0.1:60229->127.0.0.1:8080: bind: address already in use        Println(err)        os.Exit(2)    }    Printf("LocalAddr: %v\n", con.LocalAddr())    Printf("RemoteAddr: %v\n", con.RemoteAddr())}客戶(hù)端版本 B(工作):package mainimport "net"import . "fmt"import "os"func main() {    Println("client")    con, err := net.Dial("tcp", "localhost:8080")    if err != nil {        Println(err)        os.Exit(2)    }    // magic happens here    var listener, listenerError = net.Listen("tcp", con.LocalAddr().String())    if listenerError != nil {        Println(listenerError)        os.Exit(1)    }    Println("LISTENING")    conn, _ := listener.Accept() // will accept on con.LocalAddr()    Printf("LocalAddr: %v\n", conn.LocalAddr())    Printf("RemoteAddr: %v\n", conn.RemoteAddr())}
查看完整描述

1 回答

?
侃侃爾雅

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

“版本 B”作為 Go 的 POSIX 默認(rèn)設(shè)置的副作用,即使它被現(xiàn)有連接使用SO_REUSEADDR,它也允許綁定到一addr:port對(duì)??梢詤^(qū)分這 2 個(gè)套接字,因?yàn)橐呀⒌倪B接由 的 4 元組標(biāo)識(shí)(LocalAddr, LocalPort, RemoteAddr, RemotePort)。

“版本 A”不起作用,因?yàn)樵谠O(shè)置連接時(shí)它需要調(diào)用bind以設(shè)置請(qǐng)求的本地地址,并且已經(jīng)有一個(gè)綁定到該端口的偵聽(tīng)套接字。

沒(méi)有必要嘗試?yán)眠@個(gè)漏洞,您應(yīng)該為客戶(hù)端和服務(wù)器連接使用 2 個(gè)端口。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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