首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost ASIO -丢弃UDP数据包,与UE4 udp接收者相比损失很大。

Boost ASIO -丢弃UDP数据包,与UE4 udp接收者相比损失很大。
EN

Stack Overflow用户
提问于 2018-11-28 19:01:04
回答 1查看 502关注 0票数 0

我正在尝试使用一个使用的简单异步UDP监听器。我还在游戏引擎项目中使用UE4 UDP套接字(FUdpSocketBuilder)。我不会同时运行这两个UDP侦听器。我从另一个应用程序中从一个固定的udp端口获得了一系列字节数组,顺序为开始36、中间65488 x 6和结束400字节。但问题是我错过了4x65488字节,有时我在boost asio示例C++应用程序中得到了400字节。我尝试将接收到的字节数组大小增加到一个较高的数目,包括下面声明的7-8倍:

代码语言:javascript
复制
 constexpr int udp_buffer_size = 65536;  // Max limit of each packet size
 boost::array<char, udp_buffer_size> recv_buffer_;

我能做些什么,请指教?我也在Github上问过这个问题。

从Boost ASIO UDP打印:

代码语言:javascript
复制
I just recieved 36 bytes of data !
I just recieved 65488 bytes of data !
I just recieved 65488 bytes of data !
I just recieved 36 bytes of data !
I just recieved 65488 bytes of data !
I just recieved 65488 bytes of data !

来自UE4的打印:

代码语言:javascript
复制
[2018.11.28 - 17.18.29:724][829]SomeProjectLog:  Warning : 2297. Recieved Bytes from UDP 36.
[2018.11.28 - 17.18.29:724][829]SomeProjectLog : Warning : 2298. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:724][829]SomeProjectLog : Warning : 2299. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2300. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2301. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2302. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:725][829]SomeProjectLog : Warning : 2303. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2304. Recieved Bytes from UDP 400.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2305. Recieved Bytes from UDP 36.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2306. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2307. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:726][829]SomeProjectLog : Warning : 2308. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2309. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2310. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2311. Recieved Bytes from UDP 65488.
[2018.11.28 - 17.18.29:727][829]SomeProjectLog : Warning : 2312. Recieved Bytes from UDP 400.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-30 02:46:24

我今天解决了UDP数据包丢失的问题。这不是一个可以使用单独线程解决的并发问题。它是数据速度的问题,是时代内的问题,不是跨时代的问题.我的意思是,它是一种数据流,它将端口时代(重大事件)上的UDP数据包转储到有一些捕获延迟的时期。这是处理任何事情的机会之窗,不是在时代内,而是在时代之后,即400字节。我使用的是单线程程序,但是我有一个用于异步操作的Boost ASIO i/o对象。我现在所做的就是一个快速的内存副本的每一个字节数组收到,直到我达到一个模-N(时代字节总数),然后我处理每个包从累积的数组,然后我能够收集所有的数据而不丢失任何数据包!谢谢你的帮助@SergeyA

代码语言:javascript
复制
           If you want to read more about why it is not advisable to use threads besides making application complicated here is the [link](https://www.boost.org/doc/libs/1_68_0/doc/html/boost_asio/overview/core/async.html) : The Proactor Design Pattern: Concurrency Without Threads.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53526361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档