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
Lesezeichen