Ich habe unter Cygwin Xinetd ein einfaches Socket-Perl-Server-Skript hinzugefügt, um die Client-Eingabe zu bestätigen, aber es liest stattdessen leer
670
Alan Ma
Ich habe eine x32-Version 1.7.33 von Cygwin auf meinem x64-Windows7-Computer installiert.
Ich habe einen neuen Dienst unter /etc/xinetd.d/ccapi hinzugefügt.
$ 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 }
Ich folgte der xinetd-README zur Installation von xinetd und startete es:
cygrunsrv -I xinetd -d "CYGWIN xinetd" -p /usr/sbin/xinetd -a "-stayalive -dontfork" -y tcpip -u alma -w xxx cygrunsrv -S xinetd
Der Befehl " ps -ef" zeigt, dass xinetd ausgeführt wird.
Die server_xinet.exe ist ein kompiliertes ActiveState-Perl-Skript. Es erinnert an das, was es vom Kunden erhält:
... 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;
Das Client-Perl-Skript sendet nur eine Zeichenfolge an Port 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);
Ich habe dieses Client-Skript auf dem gleichen Rechner ausgeführt und erhält vom Server nichts
$ perl simpleClient.pl "This is it:" Echo from server: <>
Ich habe das local.log überprüft und dort einen neuen Eintrag gefunden:
Data Received at 2015mar12 10:11:39: <>
Dies bedeutet, dass cygwin xinetd server_xinet.exe startet.
Das Problem ist, dass der Server nichts liest <STDIN>und was auch immer er schreibt <STDOUT>, der Client hat es nicht erhalten.
Ich habe dies von einem Unix-Rechner aus portiert und dort funktioniert es einwandfrei.
Was ist das Problem hier in Cygwin?
Vielen Dank für Ihre Hilfe.
1 Antwort auf die Frage
0
Alma56
Ich habe endlich meinen Client / Server miteinander reden lassen. Ich entschied mich für cygwin perl, um sowohl den Server als auch den Client auszuführen, und es funktioniert. Anstelle von /cygdrive/c/ccintegration/scripts/cygwin/server_xinet.exe (kompiliert mit ActiveState PDK) in /etc/xinetd.d/ccapi-stream habe ich es durch / cygdrive / c / ccintegration / scripts / cygwin / server_xinet ersetzt .pl Verwenden Sie '#! / usr / bin / perl' als erste Zeile sowohl in server_xinet.pl als auch in simpleClient.pl.
./simpleClient.pl "Das funktioniert" Echo vom Server: