2011-07-15 4 views
0

Je teste un proof-of-concept qui envoie deux fichiers via une connexion TCP à un serveur distant, tous utilisant Perl. Je rencontre un problème, cependant, avec l'envoi de plusieurs fichiers. Actuellement, j'ai le client (hébergé sur Windows, exécutant ActiveState Perl) qui veut envoyer plus de 2 fichiers CSV au serveur distant (en exécutant une forme de RedHat). Au fur et à mesure que le processus se déroule, le client imprime, ligne par ligne, le contenu du fichier CSV et quand cela est fait, il envoie un message au serveur. Le serveur doit ensuite intercepter ce message et basculer le fichier pour écrire dans un autre fichier CSV.Comment envoyer plusieurs fichiers via une connexion TCP avec Perl?

Cependant, le serveur est juste un gros fichier, où je veux qu'il divise ce qu'il reçoit en deux fichiers. Donc, ma vraie question est la suivante: quel est le moyen le plus simple, en utilisant Perl, d'envoyer deux fichiers sur une connexion TCP? Je préfèrerais utiliser des modules intégrés, tels que IO :: Sockets, mais si je dois télécharger un module externe pour simplifier le processus, je peux le faire aussi.

Merci pour toutes les réponses! Il semble que ce soit les fins de ligne qui m'affectaient, et le fait que la dernière ligne d'un fichier ne soit pas précédée d'un "\ n". Le remplacement des terminaisons de ligne Windows par celles d'Unix semblait faire l'affaire, ainsi que d'autres mises en forme avec le message "End Of File". Merci à tous ceux qui ont répondu!

+0

Si vous utilisez un protocole existant qui incorpore les fichiers dans un flux de données (tel que XML), puis que vous retranchez les fichiers du protocole d'échange de données à l'autre extrémité, votre problème disparaît. – DavidO

+0

C'est pourquoi des choses comme HTTP ont été inventées. – hobbs

+0

Dans l'environnement dans lequel je travaille, je ne peux pas vraiment utiliser le protocole HTTP, bien que je le sache. –

Répondre

2

Envoie un en-tête avec la longueur du premier fichier. Comme il s'agit de fichiers texte, et il s'agit de Perl, il peut être préférable d'utiliser le nombre de lignes dans le fichier. De l'autre côté, lisez ce nombre de lignes en tant que premier fichier, puis tout le reste en tant que deuxième. Ce principe peut être étendu pour n'importe quel nombre de fichiers. Editer: Vous voulez également traduire les fins de ligne Windows en celles de Linux. Un simple s/\ r/n /; devrait faire l'affaire.

+0

Ce sont les terminaisons de ligne qui me bousculaient, auxquelles je n'avais absolument pas pensé! Merci pour l'aide! –

Questions connexes