2010-12-13 91 views
4

想象一下,Byte[] refArchiveData大小约为30-100兆字节。我想用NetworkStream stream对象将其发送到服务器: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(); 

如何在这里我把我的档案我必须修改的代码的一部分?也许分裂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 2010-12-13 11:46:00

+0

你的解决方案的工作完美!;) – Edward83 2010-12-13 12:16:11

+2

好吧,我认为这是一个框架功能,而不是我的解决方案... – m0sa 2010-12-13 12:20:09