提升asio异步udp客户端,处理程序从未触发



我已经为此挣扎了将近两周,我想是时候了寻求帮助。

我需要从运行在fpga上的服务器获取数据。服务器已写入不幸的是,有人已经不再与我们合作了。尽管服务器工作如预期,因为当我发送请求时,我可以用wireshark看到预期内容。Wireshark正在执行c++udp的计算机上运行客户

表中的前五行(1..5)是我发送的。每隔一行,ICMP中的一个由服务器发送。服务器通过多个端口。我认为发送数据是正常的否则我就无法接通xxx的6号线。

问题是我的客户从来没有收到任何东西。处理程序从不触发,我找不到原因。

你能帮我一个这个吗。

非常感谢您抽出时间。

Olivier

"不 ";来源"> ";目的地"> ";协议"> ";长度"> ";信息"> ";端口">
"1〃 ";192.168.0.254"> ";192.168.0.1"> ";UDP"> ";50〃 ";44702→5 Len=8〃 ";1〃
"2〃 ";192.168.0.254"> ";192.168.0.1"> ";UDP"> ";50〃 ";44702→5 Len=8〃 ";2〃
"3〃 ";192.168.0.254"> ";192.168.0.1"> ";UDP"> ";50〃 ";44702→5 Len=8〃 ";3〃
"4〃 ";192.168.0.254"> ";192.168.0.1"> ";UDP"> ";50〃 ";44702→5 Len=8〃 ";4〃
"5〃 ";192.168.0.254"> ";192.168.0.1"> ";UDP"> ";50〃 ";44702→5 Len=8〃 ";5〃
"6〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";60〃 ";50000→32776 Len=8〃 ";6〃
"7〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";74〃 ";51000→32776 Len=32〃 ";7〃
"8〃 ";192.168.0.254"> ";192.168.0.1"> ";ICMP"> ";102〃 ";目的地不可达(通信管理过滤)"> ";8〃
"9〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";466〃 ";52000→32776 Len=424〃 ";9〃
"10〃 ";192.168.0.254"> ";192.168.0.1"> ";ICMP"> ";494〃 ";目的地不可达(通信管理过滤)"> ";10〃
"12〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";12〃
"13〃 ";192.168.0.254"> ";192.168.0.1"> ";ICMP"> ";502"> ";目的地不可达(通信管理过滤)"> ";13〃
"14〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";14〃
"15〃 ";192.168.0.254"> ";192.168.0.1"> ";ICMP"> ";502"> ";目的地不可达(通信管理过滤)"> ";15〃
"17〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";17〃
"18〃 ";192.168.0.254"> ";192.168.0.1"> ";ICMP"> ";502"> ";目的地不可达(通信管理过滤)"> ";18〃
"19〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";19〃
"20〃 ";192.168.0.254"> ";192.168.0.1"> ";ICMP"> ";502"> ";目的地不可达(通信管理过滤)"> ";20〃
"22〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";22〃
"23〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";23〃
"24〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";24〃
"25〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";25〃
"26〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";26〃
"27〃 ";192.168.0.1"> ";192.168.0.254"> ";UDP"> ";474〃 ";52000→32776 Len=432〃 ";27〃

查看UDP响应表(假设您的C++程序运行在192.168.0.254上),您可能应该绑定到端口32776(即0x8008),因此例如在start_receive:

socket.open(udp::v4());
socket.bind({{}, 0x8008});

这对我来说是一个简单的测试驱动程序:

netcat -u localhost 32776 -w 0 <<< '01234567'

打印例如:

bool udp_client::set_acquisition_and_get_data(std::vector<std::vector<unsigned char> >&) begin
bool udp_client::send_data(std::vector<std::vector<unsigned char> >&)
send data
void udp_client::start_receive()
socket opened: true
async receive from started
void udp_client::start_receive() socket data started
void udp_client::handle_data(const boost::system::error_code&, std::size_t)
socket opened: true
async receive from started
void udp_client::handle_data(const boost::system::error_code&, std::size_t)
socket opened: true
async receive from started
...

等等。此外,data.dat文件还包含:

00000000: 3031 3233 3435 3637 0a30 3132 3334 3536  01234567.0123456
00000010: 370a                                     7.

我很抱歉。。。这只是一个防火墙问题。。。我将连接从公共区域切换到信任区域,现在,我收到了数据。至少当客户端独立运行时(简单的udp_client+main)。当我尝试在qt应用程序中运行它时,它不会触发句柄。

相关内容

最新更新