Rust不会接收来自C ++的UDP消息

时间:2019-04-16 15:43:10

标签: c++ boost rust udp

我正在使用UDP创建服务器/客户端范例,但是Rust服务器没有收到C ++客户端消息。我已经能够成功完成Rust服务器/ Rust客户端和C ++服务器/ Rust客户端的通信。

这使我相信我的C ++代码有问题,或者在将C ++缓冲区发送到Rust时存在某种类型的通讯错误,但是我使用了我相信的代码。这仅是在同一台计算机之间发送的,而没有在计算机之间扩展。

我不是UDP / TCP专家,所以我可能做错了事

锈服务器:

use std::net::UdpSocket;

fn main() {
    let udp: UdpSocket = UdpSocket::bind("0.0.0.0:12000")
        .expect("Failed to bind to address for sending/receiving messages");

    udp.connect("127.0.0.1:12683")
        .expect("Failed to connect address receiving our messages");

    //The below (recv_from) is set to blocking
    let mut buf = [0; 20];
    let (number_of_bytes, src_addr) = udp.recv_from(&mut buf).expect("Didn't receive data");
    let filled_buf = &mut buf[..number_of_bytes];
    println!("{:?}", filled_buf);
}

C ++客户端:

boost::asio::io_service io_service;
ip::udp::socket socket( io_service );
ip::udp::endpoint remote_endpoint;
std::cout << "sending reply..." << std::endl;
socket.open( ip::udp::v4() );

remote_endpoint = ip::udp::endpoint( ip::address::from_string( "127.0.0.1" ), 12000 );
unsigned char buff[8]{ 5,5,5,5,5,5,5,5 };
boost::system::error_code err;
//auto sent = socket.send_to( buffer( "Jane Doe"), remote_endpoint, 0, err );
auto sent = socket.send_to( buffer( buff ), remote_endpoint, 0, err );
std::cout << err << std::endl;
std::cout << "Sent: " << sent << std::endl;
socket.close();

C ++客户端声明已发送数据(sent变量)并且没有错误(err变量)。但是,我的Rust服务器从不接收数据。设置为非阻塞,因此它只是坐在那里等待接收数据(在客户端发送到端口12000时,它查看端口12000)。

1 个答案:

答案 0 :(得分:1)

当您连接UDP套接字时,这会导致UDP套接字仅从其连接的地址接收数据报。服务器不应连接其UDP套接字。