当前位置: 首页 > 面试题库 >

前往:如何接收完整的UDP数据报

裴英才
2023-03-14
问题内容

我的问题:使用net.Read …方法仅复制给定字节数组或切片大小的字节数。我当然不想每次分配64 kB的最大UDP数据报。

有没有一种确定数据报大小(在数据报标头中)或再次读取直到数据报被完全读取的方法?


问题答案:

尝试ReadFromUDP:

func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error)

ReadFromUDP从c读取UDP数据包,并将有效负载复制到b。它返回复制到b中的字节数以及该数据包上的返回地址。

数据包的大小应该从中可用n,然后您可以使用它来定义用于存储数据报的自定义切片(或其他数据结构)。这依赖于会话期间数据报大小不变,而实际上是不应该的。



 类似资料:
  • 我有一个连续发送数据的UDP服务器。我要接收服务器发送的所有数据包。 在服务器端,我有两个线程。一个线程从文件中连续读取数据并放入Deque。另一个线程从deque读取数据并不断发送到UDP客户端。客户端代码不断地从服务器接收数据。

  • 我有一个.NET套接字(),我想将它用于UDP(无连接通信)。我想用轮询接收数据报,也就是说,我想调用方法来检查一个数据报是否可用。如果是,我调用来接收它而不阻塞。如果不是,我会等待,稍后再投票。但现在我的问题是: 如何确定一个数据报何时结束而下一个数据报何时开始?

  • 我不知道是网络配置还是我的软件出了问题。 这是监听代码: 奇怪的是,在wireshark上,我可以看到:数据包已从发送到,并且设备已对此数据包作出响应--来自的数据包已发送到。使用bind(0.0.0.0,端口)似乎不能涵盖。我迷路了,一点主意都没有。 ifconfig为:

  • 我想使用Qt UDP(不是TCP)套接字传输文件。所以我这样写代码: 看来要传输的Qt UDP数据包的最小大小是8192字节。接收方总是得到第一个数据包,但不能接收其他数据包。 我对Qt和网络编程的经验很少,所以我不知道我的猜想对不对。你能告诉我如何改变这些代码来支持在第一个数据包之后接收数据包,这样我就可以传输大数据了吗?

  • 像一些大模型的 API,有的提供了流式的 API,允许一个字一个字来吐出数据。前端应该使用这些 API?