Aktueller Stand:
Damit der Kunde arbeiten kann, habe ich ihm die Software mit VO2.7 geändert und ausgeliefert. Ich würde aber interessehalber und um VO2.7 wegzubekommen die Software noch unter VO 2.8 zum Laufen bringen. Da ich aber die Hardware nicht habe, kann ich die Abläufe nicht testen.
Meine Idee zum Test ohne Hardware:
Die beiden Magnetkartenleser werden von einer Software namens crdreader verwaltet. Diese kommuniziert per Socket mit meinem Programm bidirektional. Meine Idee ist jetzt, mir aus dem EchoSrv einen eigenen crdreader zu machen, der mir die Zugriffe auf die Magnetkarten simuliert und die Antworten retourniert.
Dabei habe ich aber das Problem, dass ich die erste Anfrage an den EchoSrv absetzen kann, diese wird dort im Fenster angezeigt, aber jede weitere Anfrage bewirkt nichts mehr. Nachfolgend das Setup für den Thread gekürzt aufs Wesentliche und 2 Dummyanfragen:
CLASS dtaSocket INHERIT dtaSerial
EXPORT _oSocket AS CSocket
PROTECT _t1 AS TParams
PROTECT _cIP AS STRING
PROTECT _nPort AS WORD
METHOD Setup(nIndex) CLASS dtaSocket
LOCAL nID AS DWORD
LOCAL pTask AS PTR
// Socket erstellen
_oSocket := CSocket{SOCK_STREAM}
_oSocket:Timeout:=100
IF _oSocket:connect(_cIP, _nPort)
// Thread starten für Listening
_lStop := FALSE
_t1 := MemAlloc(_SIZEOF(TParams))
RegisterKid(_t1, 1, FALSE)
_t1.MainDlg := PTR(_CAST, SELF)
pTask:=CreateVOThread(NULL, 0, @Logging(), _t1, 0, @nID)
CloseHandle(pTask)
// Nachricht senden
_oSocket:SendLine("INFO#1") // Kommt beim EchoSrv an, Antwort in Func Logging retour
_oSocket:SendLine("INFO#2") // Kommt nicht an
ENDIF
RETURN SELF
Was könnte das Problem sein, dass nur die erste Anfrage an den EchoSrv dort ankommt?