Boostライブラリを使用してWindows PCとasioスタンドアロンライブラリを使用してLinux ARMビーグルボードとの間で通信するサーバーとクライアントプログラムをプログラミングしています。しばらくの間、2 つのデバイス間の 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ポートを回復できますか? 彼らは正常に通信しているので、明らかにどこかにあるに違いありません。事前に感謝します。noob の間違いがあれば申し訳ありません :)