Şimdiye kadar bu bir süreç çatallı gelen bağlantıları alır ve o zaman o bir bağlantı işlediğinde, arka planda sürekli olarak çalışan bir Perl sunucu yazdım. Ne sonuçta bunu yapmak mümkün olmak istiyorum, bu komutları çalıştırmak tabii soket üzerinden gelen php bağlantılarını kabul ve sonra geri röle ve bilgidir. Şimdiye kadar bu bir Perl ile% 100 çalışma başardı istemci komut dosyası ama bir php biri ile% 100 çalışmaz var.
[Bunun yerine burada metnin delik duvarı yapıştırarak gerçek ve gönderme bölümüne alırsınız.]
print "Binding to port ...\n";
$server = IO::Socket::INET->new(
Listen => 1,
LocalAddr => $_server,
LocalPort => $_port,
Proto => 'tcp',
Reuse => 1, Type => SOCK_STREAM) || die "Cant bind :$@\n";
$proccess = fork();
if ($proccess) {
kill(0);
}
else {
while(1) {
while ($client = $server->accept()) {
$client->autoflush(1);
$con_handle = fork();
if ($con_handle) {
print "Child Spawned [$con_handle]\n";
}else{
while (defined($line = <$client>)) {
$command = `$line`;
print $client $command;
}
exit(0);
}
}
}
Bu hem yerel hem de uzaktan bir perl yazılı müşteri ile çalışıyor ancak php ile% 100 çalışmaz dediğim gibi, ne ben% 100 demek sunucu komutunu Recive olacağı gerçektir ama geri göndermek edemiyor, ya da Sunucu komutu tarifesi için güçlü, ancak istemci yanıtı okumak mümkün değildir.
İşte ben en çok çalışma var istemci [php] olduğunu.
$handle = fsockopen("tcp://xx.xx.xx.xx",1234);
fwrite($handle,"ls");
echo fread($handle);
fclose($handle);
Burada çalışan Perl istemcisi
#!/usr/bin/perl -w
use strict;
use IO::Socket;
my ($host, $port, $kidpid, $handle, $line);
unless (@ARGV == 2) { die "usage: $0 host port" }
($host, $port) = @ARGV;
# create a tcp connection to the specified host and port
$handle = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => $host,
PeerPort => $port)
or die "can't connect to port $port on $host: $!";
$handle->autoflush(1); # so output gets there right away
print STDERR "[Connected to $host:$port]\n";
# split the program into two processes, identical twins
die "can't fork: $!" unless defined($kidpid = fork());
# the if{} block runs only in the parent process
if ($kidpid) {
# copy the socket to standard output
while (defined ($line = <$handle>)) {
print STDOUT $line;
}
kill("TERM", $kidpid); # send SIGTERM to child
}
# the else{} block runs only in the child process
else {
# copy standard input to the socket
while (defined ($line = <STDIN>)) {
print $handle $line;
}
}
Bu yardımcı olur gerekirse ben bütün sunucu gönderebilirsiniz.