0

最近、groovy で tcp サーバーを作成しましたが、telnet と同じように動作させる方法を知りたいと思っています。

たとえば、tcp サーバーを実行して cmd プロンプトを表示し、スクリプトのポートに telnet で接続して、探しているコマンドを送信します。ほとんどのコマンドは、1 行または 1 語の情報を送り返します。ただし、大きな文字列 (情報の段落に似ています) を送り返すものもいくつかあります。telnet で問題なく動作します。

しかし、tcp クライアントを作成すると、最初の行の情報しか受け入れられません。

readLines() の代わりに readLine() を使用しています。これは、readLines() を使用するとそこでハングし、次のコマンドを送信できないためです。

私も次のようなことを試しました:(疑似コード)

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

これも readLines() のようにそこにぶら下がっています

コードがどのように見えるかを確認する必要がある場合は、ここを確認してください: Groovy Tcp クライアント/サーバー送信マップ

私の sendMessage 関数はそれらとは異なりますが、同じになるように変更し、クライアントにあるものを使用しています。


編集

提供された最初の回答に応じて...

あなたが言及したことだけでなく、次のようなこともうまくやっています:

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

どちらも機能しますが、コマンドの送信方法が何らかの形で機能に干渉しています。

私の情報源 (上記のリンク) を参照すると、これらのソリューションで適切に機能しない理由を見つけることができるでしょう。

4

1 に答える 1

0

あなたの疑似コードは間違っています。ループの反復ごとに、ループをいつ終了するかを確認するために行を読み取ってから、別の行を変数 a に読み取ります。これが問題かもしれません。変数rが の場合は、次のReaderようにしてみてください。

r.eachLine { line ->
    def a = line
}
于 2010-08-21T22:09:50.643 に答える