Я создаю парадигму сервер / клиент, используя 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).