3

122.***.***.***UDP サーバーがポート 1213 でリッスンする静的 IP に UDP パケットを送信したいと考えています。

udp::resolver resolver(io_serviceSend);
    udp::resolver::query query(udp::v4(),"122.***.***.***","1213");
    udp::endpoint receiver_endpoint = *resolver.resolve(query);

    udp::socket socket(io_serviceSend);
    socket.open(udp::v4());

    boost::shared_ptr<std::string> message(new std::string("Transfer"));

    socket.send_to(boost::asio::buffer(*message), receiver_endpoint);

しかし、これは失敗します。NATのポートに送信するのではなく、プライベートポートに送信しているためですか。しかし、TCPの場合は完全に機能します。誰かが私に理論を説明したり、良いリンクを投稿したりできますか.

私のサーバーコードは

UDPTunnel::UDPTunnel(boost::asio::io_service& io_service)
:socket_(io_service, udp::endpoint(udp::v4(), 1213))
{
start_receive();
}

void UDPTunnel::start_receive()
{
    socket_.async_receive_from(
            boost::asio::buffer(recv_buffer_), remote_endpoint_,
            boost::bind(&UDPTunnel::handle_receive, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));
    cout << "\nUDP Started To Listening";
}

void UDPTunnel::handle_receive(const boost::system::error_code& error,std::size_t)
{
 cout << "\nUDP Recieved Message";
 if (!error || error == boost::asio::error::message_size)
  {
  cout << "\nRecieved Message";
  }

}

4

0 に答える 0