Thread Serverprobleme nur bei erster Datenübertragung
(5 answers)
Opened by Gast at 2008-11-08 16:47
Hallo!
Ich habe einen GPS-Tracker, der per GPSR den Standort an einen Server senden kann. Dazu übermittelt er alle paar Minuten simples ASCII in der Form: $1234567890! Der Server gibt daraufhin $OK! zurück. Den Code von faq.perl-community.de/bin/view/Wissensbasis/SimpleNonBlockingServer habe ich leicht angepasst und es funktioniert (fast): Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 use strict; use warnings; use IO::Socket::INET; use IO::Select; my $Port = 2005; my $server = IO::Socket::INET->new( LocalPort => $Port, type => SOCK_STREAM, Reuse => 1, Listen => 10 ) or die "Server läuft nicht: $@\n"; my $select = IO::Select->new($server); while (my @readable = $select->can_read) { for my $socket (@readable) { if ($socket == $server) { print "New client connects\n"; my $client = $socket->accept; $select->add($client); } else { my $byte = $socket->getc; if (defined $byte) { print "$byte\n"; if ($byte eq "!") { $socket->print("\$OK!"); } } else { print "Connection closed by client\n"; delete_socket($select, $socket); } } } } sub delete_socket {...} Das Problem: Nach dem Verbinden des GPS-Clients wird die erste Datenübermittlung nicht mit $OK! bestätigt. Ab der zweiten klappt es einwandfrei. Mit Zeile 29 gebe ich testweise die einzelnen übermittelten Zeichen aus, dort stoppt die Ausgabe bei der 1. Übermittlung gleich nach dem $. Erst nach der 2. Übermittlung werden die restlichen Zeichen der 1. Übermittlung nachgeholt und zusammen mit der 2. ausgegeben (nur ein $OK! wird zurück gesendet). Danach läuft alles normal. Ein Portscanner zeigt, dass die Übertragung vom GPS-Client einwandfrei und unverzögert funktioniert. Beim Test mit dem XP-telnet klappt es auch problemlos. Ich bin ja schon zufrieden, dass der Server ansonsten fehlerfrei läuft, aber dennoch würde mich interessieren, wo der Fehler liegt. Danke für die Hilfe, Bernd |