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
                }
            }
        }