0

我正在尝试编写一个小硬件模拟器,它从套接字读取输入并将响应写回。我想将 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 脚本按我想要的方式工作?

4

1 回答 1

5

停止标准输出的缓冲(自动刷新)有帮助吗?在 Perl 的 cat 开头添加以下内容:

$| = 1;

如果您的代码在此之前做了任何时髦的事情,您可以选择在此select STDOUT;之前添加,但对于您的 3 行测试脚本,它是不需要的。

于 2013-07-10T19:29:57.210 回答