我正在编写一个服务器和客户端程序,以在使用 Boost 库的 Windows PC 和使用 asio 独立库的 Linux ARM beagleboard 之间进行通信。我有一段时间在两个设备之间进行了成功的 UDP 通信,但现在我想从客户端连接时服务器发现的端点恢复端口。客户端连接的方式是通过查询:
udp::resolver resolver(io_service);
udp::resolver::query query_tx(udp::v4(), hostIP, "43210");
udp::endpoint receiver_endpoint_tx = *resolver.resolve(query_tx);
其中主机 IP 是一个字符串,这可以正常工作。在调试时,我注意到当我检查返回的值时:
receiver_endpoint_tx.port()
这将返回 51880。现在不要大喊大叫网络字节顺序和主机字节顺序。我知道。奇怪的是,这个数字 51880 有时是一个不同的数字,当我检查服务器在其端点中存储的内容时,它是一个完全不同的数字:21743。现在我知道我必须在字节顺序上做错了,但我试过了:
//unsigned long port_long = boost::asio::detail::socket_ops::host_to_network_long(receiver_endpoint_tx.port());
//unsigned long port_short = boost::asio::detail::socket_ops::host_to_network_short(receiver_endpoint_tx.port());
他们没有把我原来的端口:43210 还给我。网络主机也没有。那么我错过了什么,我如何才能在两端恢复我的 43210 端口?显然它一定在某个地方,因为他们正在成功地沟通。在此先感谢,如果菜鸟错误,对不起:)