Thread Serverprobleme nur bei erster Datenübertragung (5 answers)
Opened by Gast at 2008-11-08 16:47

Gast Gast
 2008-11-08 16:47
#116103 #116103
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

View full thread Serverprobleme nur bei erster Datenübertragung