Tcp 如何获得字节数组长度?

Tcp 如何获得字节数组长度?,tcp,rust,Tcp,Rust,我有一个rust中的TCP客户机,它应该与Java服务器通信。我有基本的工作,可以发送他们之间的ByteArray 但是对于bytearray缓冲区,我需要知道bytearray的长度。但我不知道我应该得到它。现在,我只有一个固定大小的缓冲区 我的防锈代码如下所示: 循环{ 让mut buffer=vec![0;12];//固定的缓冲区长度 设n=stream.read(&mut buffer).wait; 让text=from_utf8(&buffer).unwrap(); println!(

我有一个rust中的TCP客户机,它应该与Java服务器通信。我有基本的工作,可以发送他们之间的ByteArray

但是对于bytearray缓冲区,我需要知道bytearray的长度。但我不知道我应该得到它。现在,我只有一个固定大小的缓冲区

我的防锈代码如下所示:

循环{
让mut buffer=vec![0;12];//固定的缓冲区长度
设n=stream.read(&mut buffer).wait;
让text=from_utf8(&buffer).unwrap();
println!(“{}”,文本);
}
在Java中,可以使用DataInputStream将缓冲区的大小直接作为整数发送。有没有办法在生锈的地方这样做

例如,我在Java中就是这样做的:

公共字符串readMsg(套接字)引发IOException{
DataInputStream in=新的DataInputStream(新的BufferedInputStream(socket.getInputStream());
byte[]bytes=新字节[in.readInt()];//动态缓冲区长度
in.readfull(字节);
返回新字符串(字节,StandardCharset.US_ASCII);
}

您想知道的是您正在使用的协议的属性。它不是您使用的编程语言的属性。根据您的Java代码,您似乎正在使用一个协议,该协议在消息数据之前发送一个4字节长的字段(有符号/无符号?)

如果是这种情况,您可以在Rust中以相同的方式读取消息: 1.读取4个字节以获取长度信息 2.读取剩余的数据 3.反序列化数据

fn读取\u消息(流:读取)->io::结果{
让mut buffer=[0u8;4];
//阅读长度信息
stream.read_精确(&mut buffer[…])?;
//反序列化长度
设size=u32::from_be_字节(缓冲区);
//为消息分配缓冲区
//在生产中执行此操作之前,请确保检查最大尺寸
让mut payload=vec![0;size];
stream.read_精确(&mut payload[…])。等待;
//将缓冲区转换为字符串
让text=String::from_utf8(有效载荷).map_err(/*省略*/)?;
println!(“{}”,文本);
Ok(文本)
}
显然,只有当您的协议使用带有4字节无符号int前缀的长度前缀消息时,这才是正确的。这是你需要检查的东西