我正在尝试编写一个小型硬件模拟器,它从套接字读取输入并将响应写回。我想使用ncat作为网络部分,使用Perl作为逻辑。但是当我用ncat运行我的perl脚本时,它永远不会发送响应。
首先,这显示了我想如何使用ncat。我正在使用/ bin / cat进行演示,因为它很简单。
启动服务器ncat -l 1234 -keep-open --exec "/bin/cat"
启动客户端ncat 12.34.56.789 1234
这样做会导致ncat像我期望的那样回显命令。但是当我尝试在perl中编写cat并使用它而不是/ bin / cat时。
#!/usr/bin/perl
while (<>) {
print $_;
}
和
ncat -l 1234 -keep-open --exec "/path/cat.pl"
ncat永远不会将响应发送回客户端。即使从命令行,它确实完成/ bin / cat所做的事情。此外,当我使用以下bash脚本与ncat而不是/ bin / cat时,它就像/ bin / cat一样。 ncat像我期望的那样回应客户端的响应。
#!/bin/bash
while [ true ]
do
read lin
echo "$lin"
done
我需要做些什么才能让我的Perl脚本以我想要的方式工作?
答案 0 :(得分:4)
停止标准输出的缓冲(autoflush)有帮助吗?在Perl猫的开头添加以下内容:
$| = 1;
如果您的代码在此之前做了任何有趣的事情,您可以选择在select STDOUT;
之前添加,但对于您的3行测试脚本,则不需要。