Hallo Samurai,
warscheinlich schließt das E2000-NET-IO Board die Verbindung, da es inerhalb von 5 Sekunden mindestens eine Nachricht werwartet. Wenn dein Program manchmal zu langsam abfragt dann kann dieser Effekt auftreten. Versuche es doch mal im 2 Sekunden Takt. Dann sollte das Problem nicht auftreten.
Das Board kann maximal 3 Verbindungen gleichzeitig aufbauen. In der Logik kannst du neben dem Verbindungsstatus im Hauptbildschirm sehen wie viele Verbindungen zur Zeit offen sind. Wenn dein Tel-Net Client die Verbindung nicht ordnungsgemäß schließt kann es sein, dass eine Verbindung hängen bleibt und dann erst nach einigen Minuten wieder freigegeben wird.
Ich würde dir für das Programm raten, nicht nach jeder abfrage die Verbindung zu schließen. Wie gesagt, wenn da ein Fehler beim schließen passiert dann hängt die Verbindung in der Luft und man kann nicht sagen welchen Zustand diese Verbindung hat. Ich würde es so wie wir es auch machen in der Software machen:
1. Verbindung aufbauen
2. Passwort senden (Ja ich weiß das ist in der Designer-Handy-Software noch falsch)
3. Daten abfragen
4. Daten abfragen
.
.
.
n. Verbindung schließen wenn Programm geschlossen wird
Wenn zwischendurch die Verbindung verloren geht (Das sollte dir eigentlich der Socket den du programmiert hast sagen, dass keine Verbindung besteht). Dann einfach neu aufbauen. Also bei Punkt 1 erneut beginnen.
Das Passwort wird nur soweit eingelesen wie es im Speicher stellen hat. Daher kann hinter dem eigentlichen Passwort stehen was will. Das kommt daher da der Atmel nicht unendlich speicher hat, aber über Telnet ein viel zu langer String übertragen werden könnte.
Wir interpretieren die Daten Byte für Byte und können auch kleine Ethernet-Frames verarbeiten. Um die Kommunikation schnell zu halten haben wir die größe der Ethernet-Frames beschrängt. Dies hat in deinem Fall keinen einfluss, da sich darum Windows/Linux kümmert, wenn du eine Verbindung aufbaust. Als Zeilenende wird bei uns ein "chr( 13 )" benutzt ( 0x0D ).
Nach der ASCII Tabelle müsste das ein <CR> sein:
http://www.torsten-horn.de/techdocs/ascii.htm
Das ist historisch daraus gewachsen bei uns, da die RETURN Taste den Tastencode "13" generiert und dieser in der ersten Testversion mit übertragen wurde. Immer wenn dieses Zeichen erkannt wird, dann wird der Befehl ausgeführt. Es schadet jedoch nicht noch ein <LF> hinterher zu senden. Dieses wird jedoch weggeschmissen (Windows sendet standardmäßig als Zeilenende <CR> + <LF>. Dies wurde so umgesetzt im E2000-NET-IO Board. Daher funktionieren reine UNIX Anwendungen nicht. Diese senden im Normalfall nur ein <LF>.
Ich denke mal, dass waren erstmal genug "Hintergrund-Infos".
mfg
Tropby
_________________________
Elektronik2000.de | Software-Entwickler