2010-12-13 7 views
4

Imaginez que Byte[] refArchiveData soit environ 30-100 moctets de taille. Je veux l'envoyer au serveur en utilisant NetworkStream stream objet:Refactorisation de socket C# (envoi de données)

  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(); 

Comment je dois modifier la partie du code où j'envoie mes archives? Peut-être le diviser par des morceaux de 256-512 octets?

Merci pour tout conseil!

Répondre

7

Utilisez la méthode Stream.CopyTo. De cette façon, vous n'avez pas besoin de charger le fichier entier dans un tableau (en mémoire).

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

merci! je vais l'essayer;) – Edward83

+0

votre solution fonctionne parfaitement!;) – Edward83

+2

bien, je considère cela comme une fonctionnalité de cadre plutôt que ma solution ... – m0sa