【发布时间】:2014-01-24 09:32:15
【问题描述】:
我正在从 windows 向 linux 发送 udp 单播数据包。
我使用 boost 编写了简单的应用程序 udp 客户端和服务器。
我在 windows 上运行客户端(udp 发送方),在 linux 上运行服务器(udp 接收方)。
我的客户端正在发送 udp 数据包,但我在 linux 上的 udp 接收器没有收到数据包。但我可以在wireshark(在我的linux pc上运行)上看到udp数据包。
我测试了端口和ipaddress,一切正常。
下面是在linux上运行的代码。
如果我在 windows 上同时运行(客户端和服务器),它工作正常
using boost::asio::ip::udp;
class udp_server
{
public:
udp_server(boost::asio::io_service& io_service)
: socket_(io_service, udp::endpoint(udp::v4(), 7799))
{
start_receive();
}
private:
void start_receive()
{
socket_.async_receive_from(
boost::asio::buffer(recv_buffer_), remote_endpoint_,
boost::bind(&udp_server::handle_receive, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void handle_receive(const boost::system::error_code& error,
std::size_t /*bytes_transferred*/)
{
if (!error || error == boost::asio::error::message_size)
{
start_receive();
}
}
udp::socket socket_;
udp::endpoint remote_endpoint_;
boost::array<char, 1> recv_buffer_;
};
int main()
{
try
{
boost::asio::io_service io_service;
udp_server server(io_service);
io_service.run();
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
return 0;
}
【问题讨论】:
-
我无法帮助您编写代码,但您是否完全从 boost.org 复制了代码示例?如果不是从那开始
标签: boost boost-asio