2010-12-13 16 views
4

Byte[] refArchiveDataのサイズは約30-100 mbytesです。私は私のアーカイブを送信するコードの一部を変更する必要がありますどのようにC#ソケットリファクタリング(データ送信)

  TcpClient client = new TcpClient(server, port); 

      Byte[] refLengthBytes = new Byte[4]; 
      Byte[] refArchiveData = null; 

      refArchiveData = File.ReadAllBytes("C:/Temp/Python25.zip"); 

      Console.WriteLine("Archive data length is {0}", refArchiveData.Length); 

      NetworkStream stream = client.GetStream(); 

      refLengthBytes = System.BitConverter.GetBytes(refArchiveData.Length); 

      stream.Write(refLengthBytes, 0, 4); 

      stream.Write(refArchiveData, 0, refArchiveData.Length); 

      stream.Close(); 

      client.Close(); 

:私はNetworkStream streamオブジェクトを使用してサーバに送信したいですか?多分256-512バイトのチャンクで分割しますか?

ありがとうございました!

答えて

7

Stream.CopyToメソッドを使用してください。この方法で、ファイル全体をメモリにロードする必要はありません。

using (var file = File.OpenRead("<path to file>")) 
using (var client = new TcpClient("<server>", <port>)) 
using (var netStream = client.GetStream()) 
{ 
    ... 
    file.CopyTo(netStream); 
    ... 
} 
+0

ありがとう!私はそれを試してみます;) – Edward83

+0

あなたのソリューションは完璧に動作します!) – Edward83

+2

よく、私はこれは私のソリューションではなくフレームワークの機能と考えています... – m0sa

関連する問題