Heim  >  Artikel  >  Backend-Entwicklung  >  Die Golang-TCP-Verbindung funktioniert, UDP jedoch nicht

Die Golang-TCP-Verbindung funktioniert, UDP jedoch nicht

PHPz
PHPznach vorne
2024-02-06 10:54:12387Durchsuche

Golang TCP 连接有效,但 UDP 无效

Frageninhalt

Ich höre über Netcat zu nc -lkp 1902

Immer wenn ich eine TCP-Verbindung herstelle und versuche, Protokolle zu senden, funktioniert es

timeout := 30 * time.second
    conn, err := net.dialtimeout("tcp", "localhost:1902", timeout)
    if err != nil {
        panic("failed to connect to localhost:1902")
    }
    defer conn.close()

    f := log.ldate | log.lshortfile
    logger := log.new(conn, "example-", f)
    logger.println("this is a regular message1")
    logger.println("this is a regular message2")
    logger.println("this is a regular message3")
    logger.println("this is a regular message4")
    logger.println("this is a regular message5")
    logger.println("this is a regular message6")

Ausgabe

example-2022/11/18 technique24.go:21: this is a regular message1
example-2022/11/18 technique24.go:22: this is a regular message2
example-2022/11/18 technique24.go:23: this is a regular message3
example-2022/11/18 technique24.go:24: this is a regular message4
example-2022/11/18 technique24.go:25: this is a regular message5
example-2022/11/18 technique24.go:26: this is a regular message6

Aber wenn ich versuche, eine UDP-Verbindung herzustellen, funktioniert es nicht. Kann mir jemand erklären, warum der Logger nichts anzeigt?

timeout := 30 * time.Second
    conn, err := net.DialTimeout("udp", "localhost:1902", timeout)
    if err != nil {
        panic("Failed to connect to localhost:1902")
    }
    defer conn.Close()

    f := log.Ldate | log.Lshortfile
    logger := log.New(conn, "example-", f)
    logger.Println("This is a regular message1")
    logger.Println("This is a regular message2")
    logger.Println("This is a regular message3")
    logger.Println("This is a regular message4")
    logger.Println("This is a regular message5")
    logger.Println("This is a regular message6")

Möchten Sie einen kleinen POC erstellen, um Protokolle über UDP zu senden, um den Rückstand zu verringern? Ich habe zuerst versucht, eine TCP-Verbindung herzustellen. Es funktioniert einwandfrei, UDP jedoch nicht. Kann mir jemand erklären, was ich tun muss, damit es funktioniert? p>

Richtige Antwort


Netcat erstellt standardmäßig TCP-Verbindungen, sofern nicht anders angegeben. Für UDP-Verbindungen müssen Sie das -u-Flag von Netcat verwenden. Von der Netcat-Manpage

-u Verwenden Sie UDP anstelle der Standard-TCP-Option.

Das Ändern des Listeners auf nc -luk 1902 sollte das Problem mit UDP-Verbindungen beheben.

Das obige ist der detaillierte Inhalt vonDie Golang-TCP-Verbindung funktioniert, UDP jedoch nicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen