Bonjour, je souhaite transférer un fichier de plus de 10Mo par les sockets, le problème c'est que mon fichier à l'arrivé est divisé en plusieurs fichiers qui oscillent entre 2 et 8Ko.
J'ai essayé de modifier la taille du Buffer mais ça n'a rien changé, j'ai du passer à coté de quelque chose, voici mon code:
côté 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
21
22
23
24
25
26
27
28
29 private int dataBufferSize = 512; public byte[] dataBuffer; private int bufferSize = 512; public byte[] buffer; public byte[] preparerMessage(message unMessage) { //serialisation de mon instance de classe en xml StreamWriter writer = File.CreateText(@"serializedmessage.xml"); XmlSerializer x = new XmlSerializer(typeof(message)); x.Serialize(writer, unMessage); writer.Close(); // Read the file into a MemoryStream FileStream inStream = File.OpenRead(@"serializedmessage.xml"); MemoryStream storeStream = new MemoryStream(); // copy all data from in to store storeStream.SetLength(inStream.Length); inStream.Read(storeStream.GetBuffer(), 0, (int)inStream.Length); // clean up storeStream.Flush(); inStream.Close(); storeStream.Seek(0, 0); return storeStream.ToArray(); }
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
34
35 public void envoyer(byte[] unMessage) { if (!estConnecte) { //vaffich("La connexion au serveur est interrompue,.connected"); return; } if (!(ClientSocket.Poll(10, SelectMode.SelectWrite) && ClientSocket.Available == 0)) { //La connexion a été clôturée par le serveur ou bien un problème réseau est apparu //vaffich("La connexion au serveur est interrompue,send"); estConnecte = false; } else { try { buffer = unMessage; int DtSent = ClientSocket.Send(buffer, buffer.Length, SocketFlags.None); if (DtSent == 0) { //vaffich("Aucune donnée n'a été envoyée"); } else { //vaffich("message envoye : " + monmessage.getmessage()); } } catch (Exception ex) { //vaffich("La connexion au serveur est interrompue pbs :" + ex); estConnecte = false; } } }
côté serveur:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public void lecturedelegate() { readList.Clear(); //méthode qui permet de vérifier si données reçues boucle sur tous les sockets client // utilise une collection nouvelle car deconnexion possible pendant ce traitement for (int i = 0; i < acceptList.Count; i++) { readList.Add((Socket)acceptList[i]); } if (readList.Count > 0) //y a t'il un client { Socket.Select(readList, null, null, 1000);//ne sélectionne que les sockts prets a ici à etre lu for (int i = 0; i < readList.Count; i++) { if (((Socket)readList[i]).Available > 0) //a t'on reçu des données de ce socket client { readLock = true; //bloque la possibilité de supprimer pendant ce temps ce socket si déconnexion while (((Socket)readList[i]).Available > 0) { buffer = new byte[((Socket)readList[i]).Available]; ((Socket)readList[i]).Receive(buffer, buffer.Length, SocketFlags.None); } try { //génération d'un fichier xml Random RandomClass = new Random(); int RandomNumber = RandomClass.Next(); string fileName = @"messages\" + RandomNumber.ToString() + @".xml"; FileStream writer = File.Create(fileName); writer.Close(); //met le buffer dans un memory stream MemoryStream ms = new MemoryStream(); ms.Write(buffer, 0, buffer.Length); ms.Seek(0, 0); //ecriture du fichier FileStream outStream = File.OpenWrite(fileName); ms.WriteTo(outStream); outStream.Flush(); outStream.Close(); //deserialisation du xml cpaclient.message monMessage = new cpaclient.message(); StreamReader reader = File.OpenText(fileName); XmlSerializer x = new XmlSerializer(typeof(cpaclient.message)); monMessage = (cpaclient.message)x.Deserialize(reader); reader.Close(); } catch (Exception ex) { } } readLock = false; //on accepte de spprimer ce socket client si deconnexion } } }
Partager