我正在使用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)。
答案 0 :(得分:1)
当您连接UDP套接字时,这会导致UDP套接字仅从其连接的地址接收数据报。服务器不应连接其UDP套接字。