boost asio не может установить порт источника UDP

#c #sockets #boost #udp #boost-asio

#c #сокеты #boost #udp #boost-asio

Вопрос:

Я написал класс UDP с boost asio на C . В настоящее время, когда я отправляю данные UDP, выбирается случайный порт источника. Порт назначения и IP-адрес передаются при создании конечной точки. Как я могу настроить исходный порт для отправки на порт 8410? Код выглядит следующим образом:

UdpClient.h

 #pragma once
#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <boost/lexical_cast.hpp>

class UDPClient {
public:
    UDPClient(const std::stringamp; ipAddress, const std::stringamp; port);
    ~UDPClient();

    void Send(unsigned char* buff, int size);

private:
    boost::asio::io_service ioService;
    boost::asio::ip::udp::socket socket;
    boost::asio::ip::udp::endpoint remoteEndpoint;
};
  

UDPClient.cpp

 #include "UDPClient.h"

UDPClient::UDPClient(const std::stringamp; ipAddress, const std::stringamp; port) : socket{ ioService } {
    socket.open(boost::asio::ip::udp::v4());

    boost::asio::socket_base::broadcast option(true);
    socket.set_option(option);

    this->remoteEndpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(ipAddress), boost::lexical_cast<int>(port));
}

UDPClient::~UDPClient() {
    socket.close();
}

void UDPClient::Send(unsigned char* buff, int size) {
    const std::string stringBuffer(reinterpret_cast<const char*>(buff), size);
    socket.send_to(boost::asio::buffer(stringBuffer, size), this->remoteEndpoint);
}
  

Комментарии:

1. Вам необходимо привязать сокет UDP перед отправкой, если вы хотите отправить с заранее определенного порта.

2. @SergeyA Вот что я понял, однако я не уверен, как я могу это сделать. Не могли бы вы привести пример?

3. Для дальнейшего использования решение — это то, что заявил Сергей. После socket.open() Я добавил socket.bind(boost ::asio::ip:: udp:: endpoint(boost :: asio:: ip:: udp:: v4(), 8410)); и это отлично сработало!