UDP-сообщения от C ++ не принимаются Rust - PullRequest
1 голос
/ 16 апреля 2019

Я создаю парадигму сервер / клиент, используя UDP, но сервер Rust не получает клиентские сообщения C ++.Мне удалось успешно установить Rust-сервер / Rust-клиент и C ++-сервер / Rust-клиент.

Это наводит меня на мысль, что существует проблема с моим кодом C ++, или существует какой-то тип недопонимания при отправкеC ++ буферизует в Rust, но я использовал код, который, как мне кажется, работает.Это только отправляется с и на тот же компьютер и не был расширен на компьютер на компьютер.

Я не эксперт по UDP / TCP, поэтому я могу что-то делать неправильно

Сервер Rust:

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 Ответ

1 голос
/ 16 апреля 2019

Когда вы подключаете сокет UDP, это заставляет сокет UDP принимать дейтаграммы только с адреса, к которому он подключен. Серверы не должны подключать свои сокеты UDP.

...