1

私の問題は、クライアントがサーバー上のメソッドを呼び出して特定の位置でストリームを取得すると、ストリームには毎回位置 = 0 が含まれることです。

私に何ができる?

サーバー方式:

public Stream SearchTorrent(int TorrentID, int Position)
        {
            string FilePatch = ClientBusinessLogic.MyTorrents().Where((MyTorrent1) => MyTorrent1.TorrentID == TorrentID).ToList().First().Patch;
            Stream File = new FileStream(FilePatch, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            File.Position = Position;
            return File;
        }

クライアント方式:

Stream SeederFile = this.SeederInterface.SearchTorrent(TorrentID, Part.From);

Part.From の値は 0 ではありません。しかし、返されるストリームは位置の値 0 で返されます。

4

1 に答える 1

1

Streamサーバーメソッドから返された は、クライアントへの参照によって返されません。つまり、彼らはあなたのストリームを取得しません。

彼らが取得するのは、コンテンツ (で始まるPosition) がストリーミングされるため、元のストリームからのデータの末尾で、0 から始まるストリームを取得します。

基本的に、ストリームへの参照を返すことはできません。内容のコピーを取得します。

あなたは実際に何をしようとしていますか?

更新: ファイルのセクションを返したい場合は、byte[]. とにかく、これは基本的にネットワーク上で起こっていることです。このアプローチの欠点は、ブロックをサーバーのメモリに読み込まなければならないことです。

したがって、代わりに、最適化として、引き続き を返すことができますStream。このストリームは、返されるファイルの一部をラップできます。常に位置ゼロから開始されることに注意してください。

于 2013-04-15T10:36:12.590 に答える