Я установил Cygwin x7 версии 1.7.33 на мой компьютер с Windows XP x64.

Я добавил новый сервис в /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 - это скомпилированный Perl-скрипт ActiveState. Это повторяет то, что он получает от клиента:

...
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 ответ1

0

Я наконец получил мой клиент / сервер, говорящий друг с другом. Я решил использовать Cygwin Perl для запуска сервера и клиента, и это работает. Вместо /cygdrive/c/ccintegration/scripts/cygwin/server_xinet.exe (скомпилированный с использованием ActiveState PDK) в /etc/xinetd.d/ccapi-stream я заменил его на / cygdrive / c / ccintegration / scripts / cygwin / server_xinet .pl Тогда используйте '#!/ usr / bin / perl 'в качестве первой строки в server_xinet.pl и simpleClient.pl.

./simpleClient.pl "Это работает" Эхо с сервера:

С уважением, Альма

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .