1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| static private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream networkStream = tcpClient.GetStream();
Server.WriteLine("Réception des données ...");
byte[] data = new byte[1024];
int bytesRecus = networkStream.Read(data, 0, 4);
int taille = BitConverter.ToInt32(data, 0);
RecreateFile(tcpClient, networkStream, data, taille);
networkStream.Close();
Server.WriteLine("Fermeture du flux de données.");
tcpClient.Close();
Server.WriteLine("Client déconnecté.");
}
static private void RecreateFile(TcpClient tcpClient, NetworkStream networkStream, byte[] data, int taille)
{
FileStream fileStream = new FileStream(taille + ".txt", FileMode.Create); // ici le taille + ".txt" est simplement utile pour que le nom du fichier soit unique et qu'il n'écrase pas le précédent.
int nbPaquets = taille / 1024 + 1;
int taillePaquet = 0;
int count = 0, total = 0;
for(int i=0;i<nbPaquets;i++)
{
if (i == (nbPaquets - 1))
taillePaquet = taille % 1024;
else
taillePaquet = 1024;
count = networkStream.Read(data, 0, taillePaquet);
fileStream.Write(data, 0, count);
total += count;
Server.WriteLine(total + " bytes reçu ... (" + count + " bytes)");
}
fileStream.Close();
int bytesRecus = networkStream.Read(data, 0, 4);
if (bytesRecus != 0)
{
taille = BitConverter.ToInt32(data, 0);
RecreateFile(tcpClient, networkStream, data, taille);
}
} |
Partager