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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

簡單的服務器客戶端通信不起作用

簡單的服務器客戶端通信不起作用

Go
ibeautiful 2023-07-17 16:34:53
這個看似簡單的例子并沒有按預期工作,我覺得問這個問題很糟糕,但這里是:有一個客戶端重試連接到服務器,發(fā)送消息,然后等待響應: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])}它連接到一個服務器,該服務器對于每個連接,讀取并解釋發(fā)送的數(shù)據(jù),并在需要時發(fā)送響應: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ū)動:func main() {    go client()    server()}為了簡潔起見,省略了錯誤處理。預期的行為是客戶端將連接到服務器并發(fā)送消息“請求”,然后阻止讀取。服務器接收“請求”并將消息“響應”發(fā)送回同一連接。客戶端解鎖,打印收到的消息并退出。相反,當程序運行時,會打印以下內(nèi)容:2019/09/01 22:24:02 From server: 2019/09/01 22:24:02 Server got: 表明沒有數(shù)據(jù)交換,并且客戶端沒有阻塞。
查看完整描述

1 回答

?
www說

TA貢獻1775條經(jīng)驗 獲得超8個贊

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


  //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()

}



查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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