Hareket halindeyken basit bir UDP sunucusu yazdım.Golang UDP sunucusunun garip davranışı
go run udp.go
'u yaptığımda, gönderdiğim tüm paketleri yazdırır. Ancak, go run udp.go > out
çalıştırıldığında, istemci durduğunda stdout
dosyasını out
dosyasına aktarmayı durdurur.
İstemci, 10k istekleri gönderen basit bir programdır. Yani dosyada gönderilen paketlerin yaklaşık% 50'si var. İstemciyi yeniden çalıştırdığımda, istemci komut dosyasını tamamlayana kadar out
dosyası yeniden büyür.
Sunucu kodu: Burada
package main
import (
"net"
"fmt"
)
func main() {
addr, _ := net.ResolveUDPAddr("udp", ":2000")
sock, _ := net.ListenUDP("udp", addr)
i := 0
for {
i++
buf := make([]byte, 1024)
rlen, _, err := sock.ReadFromUDP(buf)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(buf[0:rlen]))
fmt.Println(i)
//go handlePacket(buf, rlen)
}
}
Ve istemci kodu:
package main
import (
"net"
"fmt"
)
func main() {
num := 0
for i := 0; i < 100; i++ {
for j := 0; j < 100; j++ {
num++
con, _ := net.Dial("udp", "127.0.0.1:2000")
fmt.Println(num)
buf := []byte("bla bla bla I am the packet")
_, err := con.Write(buf)
if err != nil {
fmt.Println(err)
}
}
}
}
İstemcideki ve sunucudaki olası hataları görmezden geliyorsunuz. İstemcinizi çalıştırırken, hemen bir çalışma zamanı hatası attı. Bir hata kontrolü ekledikten sonra: "udp'yi arayın 127.0.0.1:2000: çok fazla açık dosya". Sorununuzla ilgili bir sorun olup olmadığını bilmiyorsanız, olası tüm hatalar için çek eklemenizi rica ediyorum. Bu, sorununuzun çözümüne yol açmıyorsa, sonuçların yanına geri dönün :) – fresskoma
I hata kontrolü ekledi ve böyle bir sorun yok. Müşteri çalışıyor, başka bir sunucuyla test ettim. Bu yönlendirme soket üzerinde okuma gecikme yapar ve bazı paketler kaçırır gibi görünüyor .... –