我已经为此挣扎了将近两周,我想是时候了寻求帮助。
我需要从运行在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应用程序中运行它时,它不会触发句柄。