0

プログラム用のソケット マネージャを作成しようとしています。

私の問題は、ソケットからバッファに正確な量のデータを取得する必要があるということです。

1) 静的配列の使用

このような静的バッファを作成することは私にとってはうまくいきますが、受信するデータのサイズを常に知ることはできません。

ubyte[2] buffer;
socket.receive(buffer);

これは機能しません:

int size = buffer[0]; // for example ...
ubyte[size] buffer2; // crash at compilation because size is not known
socket.receive(buffer2);

だから私の最初の質問は:コンパイル時にサイズを知らなくても静的配列を持つことは可能ですか?

動的バッファーを使用する方法を検索しましたが、他の問題に遭遇しました。

2) スライスを使用してバッファからデータを抽出する

ubyte[] buffer;
socket.receive(buffer);
ubyte[2] header = buffer[0..2];

これは機能しますが、抽出されたスライスをメイン バッファーから削除するにはどうすればよいですか? タプルで std.algorithm から remove 関数を使用すると、次のようになります。

buffer = remove(buffer,tuple(0,2));

理由はわかりませんが、コンパイル時に次のエラーが発生します。

エラー: 未定義の識別子タプル

ここで何が問題ですか?

さらに、非同期にしたいので、私のソケットはノンブロッキングです。ソケットが同時にメイン バッファにデータをプッシュしようとすると、メイン バッファで削除を行うと問題が発生しますか?

私を読んでくれてありがとう。下手な英語でごめんなさい。私はネイティブ スピーカーではありません。

4

1 に答える 1