Fermeture du socket avant la fin de l'envoi du fichier.

leclerpr Messages postés 3 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 23 mai 2008 - 21 mai 2008 à 10:54
leclerpr Messages postés 3 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 23 mai 2008 - 23 mai 2008 à 15:11

2 réponses

leclerpr Messages postés 3 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 23 mai 2008
21 mai 2008 à 10:54
Bien le bonjour,
je développe une application Peer-To-Peer.
Chaque clients partage un lot de fichiers etc (fonctionnement assez connu, je vous épargne les details ).

Voici mon code pour envoyer mon fichier :


Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

                string filePath = "";
                /* File reading operation. */
                FichierAEnvoyer = FichierAEnvoyer.Replace("\", "/");
                while (FichierAEnvoyer.IndexOf("/") > -1)
                {
                    filePath += FichierAEnvoyer.Substring(0, FichierAEnvoyer.IndexOf("/") + 1);
                    FichierAEnvoyer = FichierAEnvoyer.Substring(FichierAEnvoyer.IndexOf("/") + 1);
                }

                byte[] fileNameByte = Encoding.ASCII.GetBytes(FichierAEnvoyer);

                if (fileNameByte.Length > 850 * 1024)
                {
                    return;
                }
               
                byte[] fileData = File.ReadAllBytes("D:\\FichiersPartages\\satellite 2.jpg");

                // Lit et stock dans clientData le fichier
                byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
                // clientData stockera aussi la taille du nom, le nom et les données
                byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);

                //Donnée binaire de la taille du nom du fichier
                fileNameLen.CopyTo(clientData, 0);
                fileNameByte.CopyTo(clientData, 4);
                fileData.CopyTo(clientData, 4 + fileNameByte.Length);

                clientSock.Connect(ipEnd);
                clientSock.Send(clientData);
                clientSock.Close();



Mon problème et ma question son simple...

J'execute en débogage avec un point d'arrêt, ça marche nikel, mon fichier arrive chez le pair destinataire ...
Je l'execute d'un coup, mon fichier fait 19Ko alors qu'il devrait faire 150Ko...
Le transfert asynchrone ne doit pas y être pour rien...mais la j'avoue que je ne sait pas comment contourner ce problème...

Merci beaucoup pour vos réponses.
0
leclerpr Messages postés 3 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 15:11
Désolé pour le code.
Je n'ai pas trouvé de solution...

Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

                string filePath = "";

                /* File reading operation. */

                FichierAEnvoyer = FichierAEnvoyer.Replace("\", "/");

                while (FichierAEnvoyer.IndexOf("/") > -1)

                {

                    filePath += FichierAEnvoyer.Substring(0, FichierAEnvoyer.IndexOf("/") + 1);

                    FichierAEnvoyer = FichierAEnvoyer.Substring(FichierAEnvoyer.IndexOf("/") + 1);

                }

                byte[] fileNameByte = Encoding.ASCII.GetBytes(FichierAEnvoyer);

                if (fileNameByte.Length > 850 * 1024)

                {

                    return;

                }

               

                byte[] fileData = File.ReadAllBytes("D:\\FichiersPartages\\satellite 2.jpg");

                // Lit et stock dans clientData le fichier

                byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];

                // clientData stockera aussi la taille du nom, le nom et les données

                byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);

                //Donnée binaire de la taille du nom du fichier

                fileNameLen.CopyTo(clientData, 0);

                fileNameByte.CopyTo(clientData, 4);

                fileData.CopyTo(clientData, 4 + fileNameByte.Length);

                clientSock.Connect(ipEnd);

                clientSock.Send(clientData);

                clientSock.Close();
0
Rejoignez-nous