У меня возникают некоторые проблемы с чтением пакетов TCP.
Я пытаюсь прочитать ответ JSON, размер которого 5000
байт, но, глядя на пакеты в Wireshark, они разделены на три разных пакета, первый и второй 1448
байтов, а третий 2530
байтов.
Когда я пытаюсь прочитать их с Tokio-rs
, я получаю только первый поэтому я не получаю целых JSON данных.
Для чтения я использую следующий код:
pub async fn read(stream: &mut TcpStream) -> Result<Bytes, std::io::Error>{
let mut buf = BytesMut::with_capacity(8128);
let mut resp = [0u8; 8128];
let buf_len = stream.read(&mut resp).await?;
buf.extend_from_slice(&resp);
buf.truncate(buf_len);
println!("{}", buf.len());
Ok(buf.freeze())
}
И buf.len()
возвращает 1448
, что точно размер первого и второго пакета, но buf
содержит данные из первого пакета.
Теперь мне интересно, пропустил ли я что-то, и TcpStream
закрывается с первым полученным пакетом или я пропустил размер буфера где-то.