#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)); и это отлично сработало!