0

tokio を使用してソケットからデータを読み取ろうとしています。データは Picamera から送信されたバイトで、コードから読み取ってファイルに書き込みます。ファイルを実行すると、途中でいくつかのフラグメントが失われているようです。上記のコードは次のとおりです。

let listener = TcpListener::bind("0.0.0.0:8080").await?;
    println!("Server started listening");
    loop {
        let (mut socket, _) = listener.accept().await?;

        tokio::spawn(async move {
            let mut buf = [0; 1024];
            let f = File::create("./test.h264").expect("Unable to create file");
            let mut f = BufWriter::new(f);
            // In a loop, read data from the socket and write the data back.
            loop {
                let n = match socket.read(&mut buf).await {
                    // socket closed
                    Ok(n) if n == 0 => return,
                    Ok(n) => {
                        f.write_all(&buf[0..n]).expect("Write failed");
                        n
                    },
                    Err(e) => {
                        eprintln!("failed to read from socket; err = {:?}", e);
                        return;
                    }
                };

                // Write the data back
                // if let Err(e) = socket.write_all(&buf[0..n]).await {
                //     eprintln!("failed to write to socket; err = {:?}", e);
                //     return;
                // }
            }
        });
    }

何が起こっているのか理解できません。サイズ 1024 のバガーを指定したと思います。ファイルへの書き込み中に 1024 を読み取ると、再度読み取りを開始する前にいくつかのパケットが失われます。私は間違っているかもしれません。pi からキャプチャした一定のビデオ ストリームを維持したいと考えています。事前に助けてくれてありがとう。

4

0 に答える 0