Instalei uma versão x32 1.7.33 do Cygwin em minha máquina x64 Windows7.
Adicionei um novo serviço em /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
}
Segui o xinetd-README para instalar o xinetd e iniciei-o:
cygrunsrv -I xinetd -d "CYGWIN xinetd" -p /usr/sbin/xinetd -a "-stayalive -dontfork" -y tcpip -u alma -w xxx
cygrunsrv -S xinetd
O comando " ps -ef
" mostra que o xinetd está em execução.
O server_xinet.exe é um script perl ActiveState compilado. Ele ecoa o que recebe do cliente:
...
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;
O script perl do cliente apenas envia uma string para a porta 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);
Executei esse script cliente na mesma máquina e ele não recebe nada do servidor
$ perl simpleClient.pl "This is it:"
Echo from server: <>
Verifiquei o local.log e encontrei uma nova entrada lá:
Data Received at 2015mar12 10:11:39: <>
Isso significa que o cygwin xinetd inicia server_xinet.exe.
O problema é que o servidor não lê nada <STDIN>
e tudo o que escreve
<STDOUT>
, o cliente não recebeu.
Eu portei isso de uma máquina Unix e funciona bem lá.
Qual é o problema aqui no Cygwin?
Obrigado por qualquer ajuda que você possa fornecer.
Responder1
Finalmente consegui fazer meu cliente/servidor conversar entre si. Decidi usar o cygwin perl para executar o servidor e o cliente e funciona. Em vez de /cygdrive/c/ccintegration/scripts/cygwin/server_xinet.exe (compilado usando ActiveState PDK) em /etc/xinetd.d/ccapi-stream, substituí-o por /cygdrive/c/ccintegration/scripts/cygwin/server_xinet .pl Em seguida, use '#!/usr/bin/perl' como a primeira linha em server_xinet.pl e simpleClient.pl.
./simpleClient.pl "Isso está funcionando" Eco do servidor:
Atenciosamente, alma