0
私はhereと記載されている勝利ソケットアプリを持っています。これまでのところ、私はReadAllBytes
メソッドを使用していて、大きなファイルからすべてをメモリに読み込んでいました。私は私の記憶を助けるチャンクで私のファイルを読む新しい方法を作った。ここで方法は次のとおりです。TCPヘッダに参加し、ソケットアプリケーションのチャンクでファイルを送信する方法
public static void ChunksToSend(string path)
{
int chunkSize = 1024;
byte[] chunk = new byte[chunkSize];
using (FileStream fileReader = new FileStream(path, FileMode.Open, FileAccess.Read))
{
BinaryReader binaryReader = new BinaryReader(fileReader);
int bytesToRead = (int)fileReader.Length;
do
{
chunk = binaryReader.ReadBytes(chunkSize);
bytesToRead -= chunkSize;
} while (bytesToRead > 0);
binaryReader.Close();
}
}
さて、私はクライアント側のリンクから、このラインで私の新しい方法を接続する必要があります。
int bytesSent = sender.Send(result);
それは簡単に見えますが、私は、TCPヘッダに問題があります私はファイルサイズと拡張コードを取得するために送信する必要があります。クライアント側の回線は次のとおりです。
//join arrays, file size info, TCP header
...
//file extension info, TCP Header
したがって、私はチャンクの前にすべてを結合し、繰り返して送信する必要があります。質問は簡単に見えるかもしれませんが、もし私がそれを行うことができれば投稿しません。ありがとう。
UPDATE:私は、ファイルサイズ情報を送信しています最初の4バイトの場合
、私はReadAllBytes
からの情報を使用していたが、今私が使用することができます。
long length = new System.IO.FileInfo(path).Length;