나는 두 개의 클래스 UDPSender와 UDPReceiver를 가지고있다.
Senarios :
(1) Linux의 QNX 및 UDPReceiver에서 UDPSender를 실행할 때 작동합니다.
(2) WindowsXP의 QNX 및 UDPReceiver에서 UDPSender를 실행할 때 작동하지 않습니다. (하지만 Wireshark를 사용하는 UDP 데이터 그램을 보았습니다. 센더 리오 (Sender)가 Senario (1)에서와 같이 작동 함을 의미합니다)
Windows.
i) 보낸 사람이 127.0.0.1로 UDP 메시지를 보내면받는 사람이 메시지를받을 수 있습니다.
ii) 보낸 사람이 UDP 메시지를 192.168.1.137 (네트워크의 로컬 주소)로 보내는 경우받는 사람은받을 수 없습니다.
boost :: asio UDP Windows에서 메시지를받는 방법?
내 질문은 :
어떻게 수신기 윈도우에서 작업받을 수 있나요?
일부 코드 : 그것은 아마도 Windows 방화벽에 의해 차단되는 것
UDPReceiver::UDPReceiver(boost::asio::io_service& service, unsigned short port)
: m_service(service),
m_socket(service, udp::endpoint(udp::v4(), port)),
m_peerEndpoint(),
m_buffer(),
m_messageReceipient()
{
}
void UDPReceiver::SetMessageReceipient(const boost::function<void(const char*, unsigned int)>& r)
{
m_messageReceipient = r;
}
void UDPReceiver::Start()
{
m_socket.async_receive_from(
boost::asio::buffer(m_buffer, m_buffer.size()), m_peerEndpoint,
boost::bind(&UDPReceiver::HandleReceived, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void UDPReceiver::Stop()
{
m_socket.close();
}
void UDPReceiver::HandleReceived(const boost::system::error_code& error, size_t bytesReceived)
{
assert(!m_messageReceipient.empty());
if(error) {
LOG(Comms, Error, "UDPReceiver:" << error.message());
}
else {
m_messageReceipient(&m_buffer.front(), bytesReceived);
m_socket.async_receive_from(
boost::asio::buffer(m_buffer, m_buffer.size()), m_peerEndpoint,
boost::bind(&UDPReceiver::HandleReceived, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
}
Senario (3)에서 로컬 주소와 동일한 결과를 갖는 udp 소켓을 초기화 해 보았습니다. –