2010-08-20 6 views
0

J'ai récemment créé un serveur tcp dans groovy et je me demande comment l'amener à se comporter comme telnet. Par exemple, j'exécute mon serveur tcp et j'appuie sur l'invite cmd pour demander le portage du script et lui envoyer les commandes qu'il recherche. La plupart des commandes renvoient une ligne/mot d'information. Cependant, il y en a quelques-uns qui renvoient une grande chaîne (similaire à un paragraphe d'information). Cela fonctionne bien avec telnet. Cependant, lorsque je crée mon client tcp, je n'arrive pas à accepter autre chose que la première ligne d'information. J'utilise readLine() à la place de readLines() car si j'utilise readLines(), il se bloque et ne me permet pas d'envoyer la commande suivante.Groovy tcp readline

J'ai aussi essayé quelque chose comme: (psuedocode)

while((r.readLine()) !=null) { 
    def a = r.readLine() 
} 

qui aussi se bloque juste là comme readlines()

Si vous avez besoin de voir ce que le code ressemble, vérifiez ici: Groovy Tcp client/server sending maps

Ma fonction sendMessage est différente sur ceux-là, mais je l'ai changé pour être le même et j'utilise celui que j'ai sur le client.


EDIT

En réponse à la première réponse fournie ...

faire bien ce que vous avez mentionné, ainsi que quelque chose comme:

while((line = r.readLine()) !=null) { 
    println line 
} 

Les deux fonctionnent, mais la façon dont j'envoie des commandes interfère d'une manière ou d'une autre avec la fonctionnalité de celui-ci.

Si vous prenez un pic à ma source (sur le lien fourni ci-dessus) peut-être vous pouvez voir pourquoi il ne fonctionne pas correctement avec ces solutions.

Répondre

0

Votre pseudocode est faux. À chaque itération de boucle, vous lisez une ligne pour vérifier quand terminer la boucle, puis lisez une autre ligne dans la variable a. C'est peut-être le problème. Si votre variable r est un Reader, essayer quelque chose comme ceci:

r.eachLine { line -> 
    def a = line 
} 
+0

je répondu à votre réponse où il est dit ** Modifier ** dans mon poste principal. Je l'ai mis là pour qu'il accepte le code – StartingGroovy