Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Perlscript, Serverantwort auswerten

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78

    Perlscript, Serverantwort auswerten

    Hallo!
    Ich versuche gerade ein Perl-Skript zu schreiben, das eine Netzwerkverbindung zu einem Game-Server öffnet, ein Zeichen sendet ("s"), und Teile der Antwort (Player, Map, etc.) in entsprechende Variablen ablegt.

    Eine Verbindung und Antwort kommt schon zustande, die Ausgabe erfolgt in der Shell.

    Code:
    #!/usr/bin/perl
     
    use IO::Socket;
    
    $remote_host = "81.0.231.147";
    $remote_port = "49124";
    
    $socket = IO::Socket::INET->new(PeerAddr => $remote_host,
                                    PeerPort => $remote_port,
                                    Proto    => "udp",
                                    Timeout  => 5)
      or die "Verbindungsaufbau fehlgeschlagen\n";
    
    $socket->autoflush(1);
    
    print $socket "s";
    
    while (<$socket>) {
      print };
    
    close($socket);
    EYE1farcry49001>$2>$1>$4> $61. $0{$8FC$1CZ$0} $1P$4ublic $1S$4erver $3AssaulAssault
    mp_px_dune
    gr_TimeLimit 1.4.0.140501516gr_ScoreLimit0 usw.

    Zum einen beendet sich das Skript so nicht und zum anderen hätte ich die Antwort ganz gerne in einer Variablen, nur kommt folgendermaßen keine Antwort.

    Code:
    #!/usr/bin/perl
    
    use IO::Socket::INET;
    
    $remote_host = "81.0.231.147";
    $remote_port = "49124";
    
    $connection = new IO::Socket::INET (Proto=>"udp",
                                        PeerAddr=>$remote_host,
                                        PeerPort=>$remote_port);
    
    print "Verbindungsaufbau fehlgeschlagen\n" if (!$connection);
    
    $connection->autoflush(1);
    
    send($connection, "s", 0 );
    
    read($connection, $page, 1024*1024);
    
    print $page;
    Ich bin für jeden Tip dankbar.

    Im nächsten Schritt stellt sich die Frage, wie man byte-weise lesen und bearbeiten kann. Das ASE-Protokoll fängt mit eye1 dann folgt ein byte, dass die Länge des folgenden Strings+ das byte angibt. Weiter gehts mit dem nächsten Byte+String usw. http://www.int64.org/docs/gamestat-protocols/ase.html

    Gruß, zagadka

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78
    Wenn man das erste Skript so abändert hat man Daten in der Variablen, allerdings fehlt ein Großteil am Ende.

    Code:
    #!/usr/bin/perl
     
    use IO::Socket;
    
    $remote_host = "81.0.231.147";
    $remote_port = "49124";
    
    $socket = IO::Socket::INET->new(PeerAddr => $remote_host,
                                    PeerPort => $remote_port,
                                    Proto    => "udp",
                                    Timeout  => 5)
      or die "Verbindungsaufbau fehlgeschlagen\n";
    
    $socket->autoflush(1);
    
    print $socket "s";
    
    $answer = <$socket>;
    
    print $answer;
    
    close($socket);
    Gruß, zagadka
    Geändert von zagadka (21-08-2007 um 21:23 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78
    Im Perlcookbook gibts die Antwort: Setting up a UDP Client: http://www.unix.org.ua/orelly/perl/cookbook/ch17_06.htm

    Gruß

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •