Bonjour, je mets en place un programme permettant l'envoie d'un fichier à traver le reseau (TCP). J'utiliser tcpclient...
Pour le moment, je tester l'envoie sur des fichiers pdf de 5mo environ. Par la suite, l'application devra gérer tout type de fichier...
Le fichier est situé sur le client, on l'envoie sur le serveur.
Je vous met une capture de code concernant la reception du fichier coté serveur. Aprés test, je reçois bien mon pdf, mais (y'en a tjrs un lol), celui est rajouté de quelques octects en plus...mais j'arrive à l'ouvrir et le consulter...
PDF Original: 4.76Mo
PDF Envoyé: 5Mo...
J'envoie par paquet de 1 mo...
J'ai bien reussi à faire l'envoi octet par octet, mais cela prends trop de temps...
Bref je ne comprends pourquoi le fichier copié est rajouté de quelques octets en plus...
Je débute en C#, je demande votre négligence
Merci à ceux qui m'aideront.
Code coté Serveur (reception du fichier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class Program { static readonly ushort port = 50000; static void Main(string[] args) { IPAddress ipAddress = new IPAddress(new byte[] { 127, 0, 0, 1 }); TcpListener tcpL = new TcpListener(ipAddress, port); tcpL.Start(); Console.WriteLine("Attente de connexion client"); TcpClient tcpC = tcpL.AcceptTcpClient(); Console.WriteLine("Client connecté"); NetworkStream network = tcpC.GetStream(); BinaryReader lecture = new BinaryReader(network); FileStream fileSend = new FileStream("C:\\temp\\" + "file" + ".pdf", FileMode.Create, FileAccess.Write, FileShare.None, 10000, true); BinaryWriter ecriture = new BinaryWriter(fileSend); int packet = 1048576; tcpC.ReceiveBufferSize = packet; bool End=false; int nByteRead=0; byte[] block = new byte[packet]; //Je recois les données que j'ecris dans le fichier... while ((nByteRead = lecture.Read(block, 0, packet)) > 0) { ecriture.Write(block, 0, packet); } network .Close(); ecriture.Close(); lecture.Close(); Console.WriteLine("Client deconnectée"); } } }
Code coté Client (Envoie du fichier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class ProgClient { static readonly string host = "localhost"; static readonly ushort port = 50000; public void Envoie(String source) { int packet = 1048576; TcpClient tcpC = new TcpClient(host, port); NetworkStream net = tcpC.GetStream(); tcpC.SendBufferSize = packet; BinaryWriter ecriture = new BinaryWriter(net); FileStream fileToSend = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read); BinaryReader lecture = new BinaryReader(fileToSend); long TailleFichier = fileToSend.Length; int refer = 0; while (refer<TailleFichier) { byte[] block = new byte[packet]; int nbLu = lecture.Read(block, 0, packet); ecriture.Write(block, 0, packet); refer += nbLu; } net.Close(); ecriture.Close(); lecture.Close(); } }
Partager