netcat を使用して、入力ファイルまたはパイプラインを使用して TCP ソケットでリッスンしているサーバーと通信すると、クライアントがハングし、入力を送信できません。ブロックしないようにするにはどうすればよいですか? この質問の時点で、私がこれに使用している「サーバー」のコードがあり、PHPで実行されます。
端末からこれを行う場合:
netcat 192.168.1.10 3320
次に、サーバーと無期限に通信できます。送信するすべての行(LF)がエコーバックされます。
しかし、私がこれを行うと:
netcat 192.168.1.10 3320 < file
or
echo "Something" | netcat 192.168.1.10 3320
その後、サーバーはファイルの内容を返しますが、netcat と通信できなくなりました。[client] プロセスはブロックするだけです。サーバーがシャットダウンされると、クライアントのブロックが解除され、上記の行の後にコンソールに書き込まれたすべてがシェルによって解釈されます。
私は成功しなかった答えを探していましたが、私が読んだことから、これはnetcatの問題です. EOF が表示されると、接続を閉じたものとして扱うように見えます。
待機オプションを試しましたが、ブロックし続けます:
netcat -q -1 192.168.1.10 3320 < file
失敗。私がしようとしているのは、netcat を使用してファイルの内容を送信し、同じコンソールを使用してメッセージを送信できるようにすることです。
サーバー':
<?php
set_time_limit(0);
$address = "192.168.1.10";
$port = 3320;
$server_users = 3;
$mysock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");
$bind_result = socket_bind($mysock,$address, $port) or die("Could not bind to address\n");
$listen_result = socket_listen($mysock, $server_users) or die("Could not set up socket listener\n");
$client = socket_accept($mysock) or die("Could not accept the connection to socket\n");
do {
$input = socket_read($client,1024,PHP_BINARY_READ);
echo $input;
} while(TRUE);
?>
今すぐ必要な場合は、次を使用してターミナルで実行します。
$ php -q server.php