2017-10-11 173 views
0

我想寫一個簡單的客戶端發佈一個UDP消息到服務器。我的緩衝區不是作爲udp發送的。當我嘗試將消息發送到netcat時,它不會出現。簡單的udp客戶端提升

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

int main(int argc, char *argv[]) 
{ 
boost::asio::io_service io_service; 
boost::asio::ip::udp::endpoint endpoint_(boost::asio::ip::address::from_string("0.0.0.0"), 2399); 
boost::asio::ip::udp::socket socket(io_service, endpoint_); 
boost::asio::socket_base::broadcast option(true); 
socket.set_option(option); 
char* data = "hello"; 
socket.send_to(boost::asio::buffer(data, strlen(data)), endpoint_); 
getchar(); 
return 0; 
} 
+0

如果您綁定套接字到ip'0.0.0.0'這意味着,它會聽上所有可用的接口。我不知道,如果這與廣播一起工作。你可以通過將它綁定到127.0.0.1並嘗試廣播來開始縮小。如果也失敗,請嘗試發送到netcat的端點。這樣你可以隔離你的問題。 – OutOfBound

回答

0

將套接字綁定到端點是一個服務器功能。您可能會注意到,如果您已經在該端口上偵聽到某個事件,您可能會收到「綁定錯誤/地址已在使用中」錯誤。

而是使用socket.open

Live On Coliru

#include <iostream> 
#include <boost/asio.hpp> 

int main() 
{ 
    using namespace boost::asio; 
    using ip::udp; 
    io_service io_service; 

    udp::socket socket(io_service); 
    socket.open(udp::v4()); 
    socket.set_option(socket_base::broadcast(true)); 

    const char* data = "hello"; 
    udp::endpoint endpoint_(ip::address::from_string("0.0.0.0"), 2399); 
    socket.send_to(boost::asio::buffer(data, strlen(data)), endpoint_); 
}