2011-07-06 15 views
0

私はUDPSenderとUDPReceiverの2つのクラスを持っています。
Senarios:
(1)LinuxのQNXとUDPReceiverでUDPSenderを実行すると動作します。
(2)WindowsXPのQNXとUDPReceiverでUDPSenderを実行すると動作しません(しかし、Wiresharkを使用しているUDPデータグラムを見ると、SenderはSenario(1)のように動作します)
(3) Windows。
i)送信者が127.0.0.1にUDPメッセージを送信する場合、Receiverはメッセージを受信できます。
ii)送信者がUDPメッセージを192.168.1.137(ネットワークのローカルアドレス)に送信する場合、受信者は受信できません。
boost :: asio UDP Windowsでメッセージを受け取る方法は?

私の質問は:

私がReceiverは、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)); 
    } 
} 
+0

Senario(3)で、私は同じ結果をローカルアドレスでudpソケットを初期化しようとしました。 –

答えて

1

それはおそらく、Windowsファイアウォールによってブロックされています。

+0

私たちのネットワークサポートに話した後、それは非常に可能性があります。しかし、愚かな企業ラップトップは私に何かを設定したり、見ることを許していません。私は同僚のノートパソコン(Windows 7)を試して見てみましょう。ありがとう。 –

+0

私の同僚のラップトップ(Windows 7)で作業しています!彼のファイアウォールは管理可能です。問題解決、愚かな私!ありがとうございました!! –

+0

@JQ:私は助けてくれると嬉しいです。 –

関連する問題