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

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

簡(jiǎn)單的服務(wù)器客戶端通信不起作用

簡(jiǎn)單的服務(wù)器客戶端通信不起作用

Go
ibeautiful 2023-07-17 16:34:53
這個(gè)看似簡(jiǎn)單的例子并沒有按預(yù)期工作,我覺得問這個(gè)問題很糟糕,但這里是:有一個(gè)客戶端重試連接到服務(wù)器,發(fā)送消息,然后等待響應(yīng):func client() {    var conn net.Conn    var err error    // retry server until it is up    for {        conn, err = net.Dial("tcp", ":8081")        if err == nil {            break        }        log.Println(err)        time.Sleep(time.Second)    }    // write to server    _, err = conn.Write([]byte("request"))    if err != nil {        log.Println(err)        return    }    // block & read from server    var buf []byte    n, err := conn.Read(buf)    if err != nil {        log.Println(err)        return    }    log.Printf("From server: %s\n", buf[:n])}它連接到一個(gè)服務(wù)器,該服務(wù)器對(duì)于每個(gè)連接,讀取并解釋發(fā)送的數(shù)據(jù),并在需要時(shí)發(fā)送響應(yīng):func server() {    ln, _ := net.Listen("tcp", ":8081")    for {        conn, _ := ln.Accept()        go handleConn(conn)    }}func handleConn(conn net.Conn) {    var buf []byte    n, err := conn.Read(buf)    if err != nil {        return    }    log.Printf("Server got: %s\n", buf)    if string(buf[:n]) == "request" {        _, _ = conn.Write([]byte("response"))    }}全部由main函數(shù)驅(qū)動(dòng):func main() {    go client()    server()}為了簡(jiǎn)潔起見,省略了錯(cuò)誤處理。預(yù)期的行為是客戶端將連接到服務(wù)器并發(fā)送消息“請(qǐng)求”,然后阻止讀取。服務(wù)器接收“請(qǐng)求”并將消息“響應(yīng)”發(fā)送回同一連接??蛻舳私怄i,打印收到的消息并退出。相反,當(dāng)程序運(yùn)行時(shí),會(huì)打印以下內(nèi)容:2019/09/01 22:24:02 From server: 2019/09/01 22:24:02 Server got: 表明沒有數(shù)據(jù)交換,并且客戶端沒有阻塞。
查看完整描述

1 回答

?
www說

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

客戶端的循環(huán)很奇怪!如果讀/寫已結(jié)束,則循環(huán)沒有意義。但錯(cuò)誤只是這樣:


  //var buf []byte <--- this read 0 bytes

  buf := make([]byte, 1024) 

  n, err := conn.Read(buf)

給您的建議:


package main


import (

    "log"

    "net"

    "time"

)


func client() {

    var conn net.Conn

    var err error


    // retry server until it is up

    for {

        log.Printf("Connecting...")

        conn, err = net.Dial("tcp", ":8082")

        if err != nil {

            log.Println(err)

            break

        }

        time.Sleep(time.Second)

        // write to server

        log.Printf("Writing...")

        _, err = conn.Write([]byte("request"))

        if err != nil {

            log.Println(err)

            return

        }

        // block & read from server

        log.Printf("Reading...")

        var buf []byte

        n, err := conn.Read(buf)

        if err != nil {

            log.Println(err)

            return

        }

        log.Printf("From server: %s\n", buf[:n])

    }

}


func server() {

    ln, _ := net.Listen("tcp", ":8082")

    for {

        conn, _ := ln.Accept()

        go handleConn(conn)

    }

}


func handleConn(conn net.Conn) {

    buf := make([]byte, 1024)

    n, err := conn.Read(buf)

    if err != nil {

        return

    }

    log.Printf("Server got: [%d bytes] %s\n", n, buf)


    if string(buf[:n]) == "request" {

        _, _ = conn.Write([]byte("response"))

    }

    conn.Close()

}


func main() {

    go client()

    server()

}



查看完整回答
反對(duì) 回復(fù) 2023-07-17
  • 1 回答
  • 0 關(guān)注
  • 123 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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