0

サーバーに接続するアプリを作成する必要があります。いくつかのメッセージを送信した後、ユーザーはコマンドを送信して結果を受信することでサーバーと対話できるようになります。

ユーザーが stdin/stdout から/へ入力を読み取ったり、出力を書き込んだりすることなくサーバーと対話できるようにするには、現在のソケットをどのようにパイプすればよいですか?

4

2 に答える 2

2

netcatを使うのが好きですか?

cat initial_command_file - | nc host:port

答えは、何かが読み書きする必要があるということです。上記のサンプルシェルスクリプトではcat、2つのソースから順番に読み取り、1つのパイプに書き込みます。ncそのパイプから読み取り、ソケットに書き込みますが、ソケットから読み取り、そのに書き込みますstdout

したがって、常に読み取りと書き込みが行われます...ただし、通信ロジックに侵入しないようにコードを構造化することができます。

たとえば、itertools.chainを使用して、と同様に動作する入力イテレータを作成しますcat。これにより、TCPに面したコードは単一の入力イテレータを使用できます。

def netcat(input, output, remote):
    """trivial example for 1:1 request-response protocol"""
    for request in input:
        remote.write(request)
        response = remote.read()
        output.write(response)

handshake = ['connect', 'initial', 'handshake', 'stuff']
cat = itertools.chain(handshake, sys.stdin)

server = ('localhost', 9000)
netcat(cat, sys.stdout, socket.create_connection(server))
于 2012-08-30T21:55:07.707 に答える
-1

あなたはおそらくpexpectのようなものが欲しいでしょう。基本的にはspawn、接続を開始するオブジェクトを作成し(たとえば、経由でssh)、そのオブジェクトexpect()sendline()メソッドを使用して、プロンプトで送信するコマンドを発行します。次に、このinteract()メソッドを使用して、ユーザーに制御を渡すことができます。

于 2012-08-30T21:55:48.383 に答える