如您所怀疑,由于UDP的性质,似乎 UDP数据包丢失
。由于UDP是无连接的,因此客户端不关心服务器是否可用或准备接收数据。因此,如果服务器忙于处理,它将无法处理下一个传入的数据报。您可以进行检查
netstat-u(其中应包括UDP数据包丢失信息)。我遇到了同样的事情,服务器(接收端)无法跟上发送的数据包的速度。
您可以尝试两种方法(第二种方法适用于您的示例):
调用SetReadBuffer。 确保接收套接字具有足够的缓冲以处理您向其抛出的所有内容。
sock, _ := net.ListenUDP("udp", addr)sock.SetReadBuffer(1048576)
在go例程中进行所有数据包处理。
尝试通过确保服务器在希望接收时不忙于其他工作来每秒增加数据报。即,将处理工作移至go例程,因此您无需按住ReadFromUDP()。
//Reintroduce your go handlePacket(buf, rlen) with a count paramfunc handlePacket(buf []byte, rlen int, count int) fmt.Println(string(buf[0:rlen])) fmt.Println(count)}
…
go handlePacket(buf, rlen, i)
最后一种选择:
最后,可能不是您想要的,您 在客户 中 睡个好觉, 这会减慢速度并消除问题。例如
buf := []byte("bla bla bla I am the packet")time.Sleep(100 * time.Millisecond)_, err := con.Write(buf)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)