gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:17:57 31 4
gpt4 key购买 nike

我正在使用 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)。

最佳答案

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

关于c++ - Rust 不接收来自 C++ 的 UDP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711985/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com