Tristl Christian: bekomme leeren string zurück bei socket verbindung zu server.pl

Hallo,

ich hänge breits seit 2 Tagen an der selben Stelle, hoffe jemand von euch hat etwas Ähnliches bereits hinter sich und kann mir helfen:

zum Script:
das server.pl script gibt eine ankommenden Socket an Isptool.pm (genauer   die Funkion Isptool::test2) weiter.

Problem:
per php-script will ich einen einfachen String an den Perl- Echo-Server schicken und die Antwort ausgeben.
Leider kommt nach der Greeting-Messages nur ein leerer String (die eigentliche Antwort) zurück ? Warum ?????

Versucht:

  • in PHP: set_nonblocking ..;
  • Socketaufbau über socket_create /fsockopen() .
  • per Dirktzugriff auf den Server "telnet localhost 9000" bekomm ich eine Antwort

da eine telnet-Verbingung einwandfrei funktioniert vermute ich den Fehler im PHP-Teil.

Ich bin für jede noch so kleine Anregung, Kritik, Hilfe dankbar!

Christian Tristl

hier meine scrits:

---- server.pl ------
#!/usr/bin/perl

use warnings;
use strict;
require NetServer::Generic;

use Isptool;

my ($foo) = new NetServer::Generic;
  $foo->port(9000);
  $foo->callback(&Isptool::test2);
  $foo->mode("forking");
  print "Starting server on port 9000\n";
  $foo->run();

---ENDE-----

----- Isptool.pm -------
#!/usr/bin/perl
############################################################

Isptool.pm - Tristl Christian

############################################################

use warnings;
use strict;

package Isptool;

sub test2 {

puffer ausschalten

select (STDOUT);
$| = 1;
                my ($tmp) = "";
                my ($s) = shift ;

print STDOUT "Echo server: type bye to quit, exit ",
                                      "to kill the server.\n\n" ;

while (defined ($tmp = <STDIN>)) {
                             return if ($tmp =~ /^bye/i);
                             $s->quit() if ($tmp =~ /^exit/i);

print STDOUT "You said: $tmp\n";

if (STDOUT) {
                     print STDERR "da geht was auf sOUT:\n";
                               }
                     print STDERR "$tmp\n";
                                                          }
          } # Ende der test2 func

-------- ENDE ----------

--------- socket6.php ---------
<html>
<head>
TCP-IP socket zwischen FrontEnd und Perl-Master-Server
</head>

<body>

<?
// form not yet submitted
if (!$submit)
{
?>
<form action="<? echo $PHP_SELF; ?>" method="post">
Enter some text:<br>
<input type="Text" name="message" size="15"><input type="submit"
name="submit" value="Send">
</form>
<?
}
else
{
        // form submitted

// where is the socket server?
        $host="127.0.0.1";
        $port ="9000";

// open a client connection
        $fp = fsockopen ($host, $port, $errno, $errstr);

if (!$fp)
        {
                $result = "Error: could not open socket connection";
        }
        else
        {
                // get the welcome message
        $res = fgets ($fp, 1024);
        echo "<br>greeting message", $res ,"<br>";

// write the user string to the socket
        $res_put = fputs ($fp, $message);

if ($res_put < 0) {
  echo "Fehler in fputs";
              }

echo $res_put;

// get the result
                $result .= fgets ($fp, 1024);
                echo "<br>Result:" , $result, "!";

if ($result < 0)
                {
                         echo "fehler in fgets; keine daten angekommen!";
                }
                if ($result == "false") {
                 echo "<br>im String ist nix drin; string ist false<br>";
                         }

// close the connection
        #       fputs ($fp, "bye");
                fclose ($fp);

// trim the result and remove the starting ?
                $result = trim($result);
                $result = substr($result, 2);

// now print it to the browser
        }
?>
Server said: <b><? echo $result; ?></b>
<?
}
?>

</body>
</html>

--------- ENDE ---------