Groovy tcp readline - PullRequest
       25

Groovy tcp readline

0 голосов
/ 21 августа 2010

Я недавно создал tcp-сервер в groovy, и мне интересно, как заставить его вести себя подобно telnet.

Например, я запускаю свой tcp-сервер и открываю приглашение cmd, чтобы telnet-порт портаСценарий и отправить ему команды, которые его ищут.Большинство команд отправляют обратно одну строку / слово информации.Однако есть несколько, которые отправляют обратно большую строку (аналогично параграфу информации).Он отлично работает с telnet.

Однако, когда я создаю свой tcp-клиент, я не могу заставить его принимать что-либо, кроме первой строки информации.

Я использую readLine ()вместо readLines (), потому что, если я использую readLines (), он зависает там и не позволяет отправить следующую команду.

Я также попробовал что-то вроде: (psuedocode)

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

Который также просто висит там, как readLines ()

Если вам нужно посмотреть, как выглядит код, проверьте здесь: Groovy Tcp клиент / сервер отправляет карты

MyФункция sendMessage отличается от них, но я изменил ее, чтобы она была такой же, и я использую ту, которая у меня есть на клиенте.


РЕДАКТИРОВАТЬ

В ответ на первый предоставленный ответ ...

Хорошо делает то, что вы упомянули, а также что-то вроде:

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

Оба работают, но способ отправки команд каким-то образом влияет на его функциональность.

Если вы берете пик у моего источника (по ссылке, указанной выше), возможно, вымогу определить, почему он не работает должным образом с этими решениями.

1 Ответ

0 голосов
/ 22 августа 2010

Ваш псевдокод неверен. На каждой итерации цикла вы читаете строку, чтобы проверить, когда закончить цикл, затем читаете другую строку в переменную a. Это может быть проблемой. Если ваша переменная r является Reader, попробуйте что-то вроде этого:

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