我在 Cygwin Xinetd 下添加了一个简单的套接字 perl 服务器脚本来回显客户端输入,但它却显示为空白

我在 Cygwin Xinetd 下添加了一个简单的套接字 perl 服务器脚本来回显客户端输入,但它却显示为空白

我在 x64 Windows7 机器上安装了 Cygwin x32 版本 1.7.33。

我在 /etc/xinetd.d/ccapi 下添加了一个新服务。

$ cat ccapi-stream
service ccapi
{
        id = ccapi-stream
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = alma
        server = /cygdrive/c/ccintegration/scripts/cygwin/server_xinet.exe
        port = 49300
}

我按照 xinetd-README 安装了 xinetd 并启动了它:

cygrunsrv -I xinetd -d "CYGWIN xinetd" -p /usr/sbin/xinetd -a "-stayalive -dontfork" -y tcpip -u alma -w xxx
cygrunsrv -S xinetd

命令“ ps -ef”显示xinetd正在运行。

server_xinet.exe 是一个已编译的 ActiveState perl 脚本。它回显从客户端接收到的内容:

...
open($localLog ">> local.log");
$rdata = <STDIN>;
chomp($rdata);
print $localLog "  Data Received at $d $t: <$rdata>\n";  # so I know xinetd loads this exe
close $localLog;

# write response data to the connected client
print STDOUT "You said: $rdata\n";
exit;

客户端 perl 脚本仅向端口 49300 发送一个字符串。

$HOST = "127.0.0.1";  # also tried using hostname "HOST.xxx.com";
$PORT = "49300";
$data = "@ARGV";

$socket = IO::Socket::INET->new(
    PeerAddr => "$HOST",
    PeerPort => "$PORT",
    Proto => "tcp",
    );
die "Could not connect to $HOST:$PORT : $@\n" unless $socket;

  print $socket "$data\n";
  $socket->flush();
  $answer = <$socket>;
  print "Echo from server: <$answer>\n";
close($socket);

我在同一台机器上运行了这个客户端脚本,但没有收到来自服务器的任何消息

$ perl simpleClient.pl "This is it:"
Echo from server: <>

我检查了 local.log 并发现其中有一个新条目:

Data Received at 2015mar12 10:11:39: <>

这意味着 cygwin xinetd 启动 server_xinet.exe。

问题是服务器没有读取任何内容<STDIN>,而无论服务器写入什么 <STDOUT>,客户端都没有收到。

我从一台 Unix 机器移植了这个并且它在那里运行良好。

Cygwin 这里有什么问题?

感谢您的任何帮助,您可以提供。

答案1

我终于让我的客户端/服务器互相通信了。我决定使用 cygwin perl 来运行服务器和客户端,而且它确实有效。我没有使用 /etc/xinetd.d/ccapi-stream 中的 /cygdrive/c/ccintegration/scripts/cygwin/server_xinet.exe(使用 ActiveState PDK 编译),而是将其替换为 /cygdrive/c/ccintegration/scripts/cygwin/server_xinet.pl,然后在 server_xinet.pl 和 simpleClient.pl 中使用“#!/usr/bin/perl”作为第一行。

./simpleClient.pl “这正在工作” 来自服务器的回声:

问候,阿尔玛

相关内容