Gehen Sie TCP-Lesen ist non-blocking

Ich versuche, einen server und einen client in Gehen, ich habe es geschafft, die Kommunikation mit dem server und client. Aber das problem das ich habe ist, dass die TCP-Lesen in golang nicht blockiert.
Was würde ich gerne wissen, ob es möglich ist für das Lesen in golang zu blockieren, wie das Lesen in C.
Danke

EDIT:

Hier ist der source code von der server:

func Init_tcp() *net.TCPListener {
    laddr, err := net.ResolveTCPAddr("tcp", ":4243")
    if err != nil {
            log.Fatal(err)
    }
    tcp, err := net.ListenTCP("tcp", laddr)
    if err != nil {
            log.Fatal(err)
    }
    return tcp
}

func main() {
    tcp := Init_tcp()
    conn, _ := tcp.Accept()
    data := make([]byte, 512)
    conn.SetNoDelay(false)
    for {
            conn.Read(data)
            fmt.Println(data)
    }
}

und mein client:

func Init_tcp() *net.TCPConn {
    laddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:4243")
    if err != nil {
            log.Fatal(err)
    }
    tcp, err := net.DialTCP("tcp", nil, laddr)
    if err != nil {
            log.Fatal(err)
    }
    return tcp
}

func main() {
   tcp := Init_tcp()
   tcp.Write([]byte("hello world"))
}
  • Zeigen Sie Ihren code *net.TCPConn blockiert auf Read -- mit einem optionalen timeout.
  • Ich habe gerade editiert meinen post mit meiner Quelle
  • Mai wurden zunächst unklar, wirft aber ein echtes Problem für den Umgang mit einem Teil der Daten aus Read (vor allem aus Netzwerk-verbindungen). Fühlt sich nicht wie ein -2 überarbeitet.
  • Ich denke, dass Ihr wirkliches problem ist das ignorieren der Fehler aus Lesen. Sobald Ihr client beendet wird, der schreiben socket geschlossen wird, kann das Lesen beginnen, Fehler zurückgeben, was in, was scheint, eine unendliche Schleife. Denken Sie daran, dass Lesen können, die Daten zurückgeben, ein Graf UND ein Fehler in den gleichen Anruf. Und Sie haben, um mit alle von Ihnen.
InformationsquelleAutor jybateman | 2014-11-18
Schreibe einen Kommentar