当我使用 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] 进程只是阻塞。一旦服务器关闭,客户端就会解除阻塞,并且在上面的行之后写在控制台上的所有内容都由 shell 解释。
我一直在寻找没有成功的答案,但根据我的阅读,这是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