SerialLib Klasse für VO 2.8

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

User avatar
ArneOrtlinghaus
Posts: 412
Joined: Tue Nov 10, 2015 7:48 am
Location: Italy

SerialLib Klasse für VO 2.8

Post by ArneOrtlinghaus »

Ach so, das sind die Sockets. Da kann ich gar nicht groß mitreden.

Wie viel es kostet, eine ältere Entwicklungsumgebung mitzuschleppen, muss man sich ausrechnen. Aber oft ist es gar nicht so schlimm, jedenfalls für ein paar Jahre. Mit den virtuellen Maschinen kann man solche Speziallösungen auch relativ preiswert auslagern auf eine virtuelle Maschine, die man nur startet, wenn man Änderungen machen muss.

Ich hatte mehrere Jahre noch ein VO 2.5 parallel zu VO 2.8 installiert, weil ein automatisches Update für ein Hilfsprogramm nicht funktioniert hätte wegen den Runtime-Dlls cavort... -> vorun...
Erst als die alte virtualisierte Entwicklungsumgebung mit Windows Vista nicht mehr funktionierte, hatte ich mich um Ersatz gekümmert, der auch mehr als 1 Tag Arbeit und Hilfe von Kollegen benötigt. Das sind natürlich "technische Schulden", die irgendwann abgearbeitet werden müssen.

Gruß
Arne
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by g.bunzel@domonet.de »

Hallo Franz,

...wenn Du dazu Testanwendungen mitsenden würdest (Deinen EchoSrv und die Testanwendung zum Senden der Nachrichten) wäre es viel einfacher, bei dem Problem zu helfen. So müsste erst eine Testumgebung erstellt werden - die dann evtl. von Deiner Anwendung abweicht.

Gruss

Gerhard
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

SerialLib Klasse für VO 2.8

Post by lagraf »

Hallo Gerhard,
der EchoSrv ist 1:1 derjenige, der bei VO dabei ist. Meine App kann ich nicht posten, da sind zu viele Umgebungsbedingungen vorhanden, die woanders nicht laufen würden (Oracle DB, 2 Waagen, 2 Magnetkartenleser, ..). Eine Reduktion auf das Wesentliche umfaßt den geposteten Teil, werd ich aber gerne in eine MDI oder SDI Basisapp einbauen, dauert ein wenig.
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by SHirsch »

Hallo Franz,

das Senden erfolgt bei deinem Beispiel direkt hintereinander. Kommen die beiden Nachrichten vielleicht zusammen an? Was ist denn auf der Serverseite zu sehen? Was kommt bei deinem Logger genau an?

Mach mal zwischen die beiden SendLine ein Sleep(1000) rein und probier erneut.

Stefan
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

SerialLib Klasse für VO 2.8

Post by lagraf »

Hallo Stefan,
den Sleep dazwischen hab ich schon probiert, hilft aber nichts.

Ich habe meine App nun aufs Minimum reduziert und beigelegt. Der Echo Protocol Server von VO ist nicht dabei, weil original VO. Defaultmäßig sendet meine App nach 127.0.0.1 Port 7.
LFSTest.zip
(4.69 KiB) Downloaded 151 times
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by SHirsch »

dein Programm funktioniert. In TcpView sieht man 2 Nachrichten.
Mit meinem eigenen TCPServer sehe ich auch beide Nachrichten. Der EchoServer scheint also das Problem zu sein.
Stefan
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by Karl-Heinz »

Hallo Franz,

Wenn es mit dem SendLine() ein Problem gibt müsste die Methode lt. Doku dann ja 0 zurückgeben.

Code: Select all

Number of data sent, if successful; otherwise, 0 (zero).
Falls 0, würde ich mir mal die Properties Error, ErrorMsg und Status anzeigen lassen. Sehe gerade, dass es auch noch eine Methode DisplayError() gibt.

Gruß
Karl-Heinz
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

SerialLib Klasse für VO 2.8

Post by lagraf »

Ich habe die Anwendung jetzt so umgebaut, dass nach jeder Antwort vom EchoSrv wieder eine neue Anfrage gesendet wird. Also müßte das ganze jetzt wie beim PingPong immer hin- und hergehen, was es aber nicht tut. Ab der 2. Sendung kommt Error 10060 Timeout zurück. Außerdem scheint die ganze Kommunikation ziemlich asynchron zu sein und die Anwendung crashed auch ziemlich unbegründet in ihrer Schleife.

Der Unterschied zum EchoClt ist, dass dort mit jedem man. Sendevorgang ein neuer Socket eröffnet wird. Daher ist jede Sendung immer die erste Sendung und es gibt keine Schleife.
LFSTest.zip
(4.8 KiB) Downloaded 147 times
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by SHirsch »

Hallo Franz,

Du machst nach dem CreateVOThread ein CloseHandle. Ich denke das sollte erst aufgerufen werden wenn der Thread beendet wurde.

Für weitere Test würde ich als erstes mal das Threading Zeug rausschmeißen. Bau dir ein Schleife in der du sendest und empfängst. Immer schon im Wechsel. Wenn das geht, fängst du an Stück für Stück umzubauen. Und wenn du unbedingt mit Thread arbeiten möchtest, dann sollte sich dieser auf das wesentlich beschränken: Daten abholen und zur Weiterverarbeitung bereitstellen. EndDialog und ApplicationExec gehören definitiv nicht in einen Thread sondern ins Hauptprogramm.

Stefan
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

SerialLib Klasse für VO 2.8

Post by lagraf »

Hallo Stefan,
unter VO 2.7 funktioniert das Originalprogramm mit diesem Thread genau in dieser Form. Neu hinzugekommen sind nur die Anzeigen mit ? und das neuerliche Senden

Code: Select all

IF !Empty(cLine)
	nRet := oDta:_oSocket:SendLine("INFO#Next")     // Kommt nicht an
ELSE
ENDIF
damits eine Schleife ergibt. In der Praxis schauts so aus, dass nach dem ersten Senden der Infonachricht gewartet wird, dass der crdServer meldet "Karte gesteckt" und dann gibts erst die Rückantwort "Auswurf vorn" oder "Auswurf hinten".

Ich versuche mal den EchoSrv so umzubauen, dass genau dieser Ablauf gegeben ist.
Post Reply