Bonjour à tous,
Je développe présentement une application client/server qui envoie des fichiers lorsque certaines conditions spécifiques sont rencontrées. Mais, mon problème est le suivant: lorsque le fichier arrive du coté serveur, il ne s'écrit pas au complet sur le disque. Le fichier est bien envoyé au complet mais la réception semble douteuse et pourtant ce code seul marche très bien.
Aussi, dès que j'augemente la taille du buffer, et bien une plus grosse partie du fichier s'inscrit sur le disque mais avec un buffer de 5mo et un document Word de 96k, je crois en avoir emplement!
Alors si quelqu'un une idée, ce serait bien apprécié!
Merci,
Friedrick
Code Serveur
Code Client
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 public void StartServer() { try { sock.Listen(100); Socket clientSock = sock.Accept(); byte[] clientData = new byte[1024 * 5000]; int receivedBytesLen = clientSock.Receive(clientData); int fileNameLen = BitConverter.ToInt32(clientData, 0); string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen); BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + "/" + fileName, FileMode.Create)); bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen); bWrite.Close(); clientSock.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } }
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 public static void SendFile(string fileName) { try { IPAddress[] ipAddress = Dns.GetHostAddresses("192.168.110.159"); IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656); Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); string filePath = ""; fileName = fileName.Replace("\\", "/"); while (fileName.IndexOf("/") > -1) { filePath += fileName.Substring(0, fileName.IndexOf("/") + 1); fileName = fileName.Substring(fileName.IndexOf("/") + 1); } byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName); byte[] fileData = File.ReadAllBytes(filePath + fileName); byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length]; byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); fileNameLen.CopyTo(clientData, 0); fileNameByte.CopyTo(clientData, 4); fileData.CopyTo(clientData, 4 + fileNameByte.Length); clientSock.Connect(ipEnd);; clientSock.Send(clientData); clientSock.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } }
Partager