В чем проблема моей попытки перевода кода с java на rust?
Я пытаюсь сделать "рукопожатие" с майнкрафт сервером на Rust. Я основываюсь на этом ответе и этом вики.
Код из ответа на java работает, однако любые запросы, посылаемые на сервер через UDPSocket на Rust выдают ошибку "Удаленный хост принудительно разорвал существующее подключение. (os error 10054)".
Для примера: Я запустил майнкрафт и открыл мир для локальной сети. Адрес сервера - 127.0.0.1:50312 (порт может меняться). Запросы с java работают, однако такой код в Rust (простая попытка пинга):
let mut socket = UdpSocket::bind("127.0.0.1:50001").expect("Failed to connect");
let address = "127.0.0.1";
let port: u16 = 50312;
let addr = format!("{}:{}", address, port);
let mut data = [0u8; 2];
data[0] = 0x01;
socket.send_to(&data, addr.clone());
Выдает вышеупомянутую ошибку при последующем прослушивании сокета
Вот полный незаконченный код моих запросов (код экспериментальный)
Вопрос: Что я делаю не так? Как правильно это сделать?
Ответы (1 шт):
C первого взгляда сразу заметно, что разные протоколы.
В примере на Java используется класс Socket, который использует под капотом TCP/IP протокол. В Rust примере выше используется UdpSocket, который использует другой протокол - UDP/IP.
В Java UDP/IP сокет называется DatagramSocket.
Нужно просто сменить UdpSocket на другой, который работает по протоколу TCP/IP.