IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

Envoi important de données TclientSocket


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Par défaut Envoi important de données TclientSocket
    Bonjour à tous,

    J'ai un petit problème concernant une liaison client/serveur. Je programme avec delphi depuis 2 mois seulement et ne connait pas trop de choses sur ses composant.

    Voici mon problème :
    J'ai développé une liaison client serveur (via les composant TserveurSocket et TClientSocket) entre un module que j'ai intégré dans un logiciel SIG (MapInfo), qui est donc le client, et un serveur que j'ai développé moi même.

    Le Client se connecte au serveur puis récupère des données sur les objets de la carte du SIG. Il insère ces données dans du code XML (via composant TXMLDocument).

    Une fois toutes les informations récupérées, il envoie le tout au serveur qui l'interprètera (envoi via sendText(XMLDoc.XML.text)).

    Oui mais voilà, si les informations ne sont pas trop nombreuses aucun problème, mais sinon le client me retourne une erreur d'écriture sur la socket, et donc le serveur ne reçoit rien du tout. Résultat MapInfo plante.

    Il faut savoir que la quantité d'information est vraiment volumineuse :environ 1h30 pour la récolte et conversion XML des infos, pour une taille de plus de 80 mo (en faisant XMLDoc.SaveToFile le fichier que j'obtiens pèse 81,4 mo).

    Ma version précédente fonctionnait mais, je l'ai modifié en ajoutant un élément de plus à récupérer par objet sur la carte, et maintenant j'obtiens cette erreur sur la socket (le document xml est plus lourd qu'avant, on passe de 70 Mo à 81,4 mo il me semble).

    J'utilise un fichier log dans lequel j'insère les différentes actions effectuée, je suis donc sur que l'erreur se situe au niveau de l'envoi des données au serveur.

    Je me demande donc d'où vient l'erreur et aimerait avoir vos avis si possible.
    Etant donné que dans des cas où il y a moins d'infos l'appli fonctionne, je me demande s'il n'y a pas une limite à la taille de la chaine de caractère que j'envoi via sendSocket...Mais j'aimerais en être sur, et vu mon inexpérience en Delphi je passe peut être à côté de quelquechose de facile, d'où ma demande.

    N'hésitez pas à me poser des questions supplémentaires et merci pour l'attention que vous porterez à mon problème.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Normalement la chaine est découpée en fragment pour respecter la norme TCP/IP, puis est même redécoupé par les routeurs ... bon en tout cas, tout arrive dans le bon ordre heureusement, et tu en reçois bout par bout, voir ce code simple qui illuste ce comportement : Envoi donnes par socket
    Par expérience, c'est des paquets de 8Ko dans un réseau local

    Voir aussi le code de Nono : Transfert de fichiers avec TServerSocket/TClientSocket.

    Tu pourrais peut-être zippé le XML pour en réduire le volume, j'ignore si tu peux configurer cela dans MapInfo ...

    Fais-tu les tests avec MapInfo ou entre ton propre Client, déjà au moins tu verrais si c'est ton code ou MapInfo qui déconne pour des volumes plus importants ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Par défaut
    Bonjour et merci pour cette réponse.

    Il faut savoir que le module MapInfo que j'ai réalisé appelle une une dll client (programmé en delphi). Dans cette dll on a des procédures qui permettent d'ouvrir un client, d'initialiser l'objet TXMLDocument, d'y ajouter des données, ...

    En fait le module ne fait qu'appeler ces procédures.

    En fait il n'y a pas de liaison client-->MapInfo. Mais simplement une liaison MapInfo-->client.

    Ainsi l'objet TXMLDocument n'est pas connu du logiciel mapInfo.

    L'appli client et ses procédures, si elles sont appelées par MapInfo, ne sont pas interne à mapInfo (ceci dit c'est vrai que mapInfo plante si le client plante, on m'avait expliqué mais je ne m'en souviens plus, une histoire d'adresse mémoire il me semble...).

    Donc en théorie, on parle d'une liaison simple client-serveur, tous 2 programmé en delphi.

    Il faut aussi savoir qu'il n'y a pas de fichier XML, le XML est simplement contenu dans une variable, donc pour le zip bah, je vois pas trop...

    Pour le test sans mapInfo, je ne vois pas vraiment comment faire, étant donné que mes données sont dans tables sous mapInfo...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Par défaut
    Super !

    J'ai testé avec le code que tu m'as conseillé (le premier lien) et ça marche nikel (utilisation de TMemoryStream plutôt qu'envoi direct en sendText).

    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/01/2013, 23h19
  2. [CR]Importer des données d'une feuille excel
    Par rolan dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/12/2004, 22h32
  3. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  4. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22
  5. Importation de données postgresql
    Par ythierrin dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/10/2003, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo