使用套接字 API 的 UDP

发布于 2024-08-17 20:13:39 字数 401 浏览 1 评论 0原文

我的服务器使用UDP。它在获取后自动向我的程序发送900bytes/1ms。我在 Windows (VB6) 中使用套接字 API。我做了一个测试,我知道我的程序的消息处理时间(大约0.3ms)比循环时间(1ms)短。所以原因应该是socket内部缓冲区。我尝试调用setsockopt函数来设置更大的缓冲区:

setsockopt(SockNum, SOL_SOCKET, SO_RCVBUF, SockBuffer(1), 1048576)

但我仍然丢失了数据。我该如何解决我的问题? 我正在使用 recv 函数来接收数据。 recvfrom 应该更好吗?

此外,我需要为 UDP 创建一个 FIFO 缓冲区。我怎样才能做到这一点(即算法或示例)?

My server use UDP. It sends 900bytes/1ms to my program automatically after being acquired. I'm using socket API in Windows (VB6). I had made a test and I know that the message processing time (about 0.3ms) of my program is shorter than cycle time (1ms). So the cause should be socket internal buffer. I try calling setsockopt function to set the bigger buffer:

setsockopt(SockNum, SOL_SOCKET, SO_RCVBUF, SockBuffer(1), 1048576)

but I still lost data. How can I fix my problem?
I'm using recv function to receive data. Should recvfrom be better?

Futhermore, I need make a FIFO buffer for UDP. How I can do so (i.e. algorithms or examples)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回旧景 2024-08-24 20:13:39

在您的问题中,您似乎在抱怨使用 UDP 并丢失数据。

如果您使用 UDP,您将会丢失数据。避免丢失数据的方法是使用 TCP,而不是 UDP。如果您尝试采用用户数据报协议并向其中添加可靠的数据传输,您最终会得到具有 TCP 的所有流量控制和数据窗口的协议……只不过它不会实现得那么好你想要的。

请记住,“那些不理解 TCP 的人注定要重新发明它......很糟糕”

In your question you seem to be complaining about using UDP and losing data.

If you are using UDP, you are going to lose data. The way that you avoid losing data is to use TCP, not UDP. If you try to take the User Datagram Protocol and add reliable delivery of data to it, you will end up with something that has all of the flow-control and data windowing of TCP... except it won't be implemented as well as you want.

Remember, "Those who do not understand TCP are doomed to reinvent it.... poorly"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文