SocketVerbindung

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

SocketVerbindung

Beitrag von Bernd Reinhardt »

Hallo
Ich habe ein Problem mit der Socketverbindung. (Version 1.9 SL1)
Ich habe einen Barcodeleser der immer dann sendet wenn jemand einen Barcode hinhält. Der Verbindungsaufbau passt.
Ich erhalte auch den Barcode zurück. Wenn ich das Programm so laufen lasse, so erhalte ich am Anfang den Barcode. Nach ca. 1 min erhalte ich keine Daten mehr von dem Barcode, obwohl die Verbindung noch steht. Kein Errocode, und nBytes = 0, da durch den ausgeschalteten Blockingmodus keine Wartezeit bei Socketrecv vorhanden ist. Am Barcodeleser kann es nicht liegen, denn wenn ich ein VB.net Programm nehme, und mache dort das selbe, so bekomme ich auch nach einer längerer Zeit noch Daten angezeigt.
Der Barcode ist 10 Zeichen lang, 8 Digit + CR + LF.

Code: Alles auswählen

nSocket := SocketOpen( SOCK_STREAM, cServer, nPort, @nError )
   lSuccess := SocketSetBlockingMode( nSocket, .f.   ) --> lSuccess
   do while .t.  // for ever zum testen
      cBuffer   := space(40)
      nBytes    := SocketRecv( nSocket, @cLength, 44, ,@nError )
      if nBytes > 0
         msgbox("Daten vorhanden")
      endif
      sleep(100)
   enddo
   SocketClose( nSocket )
Das ganze hatte ich früher mit einer seriellen Schnittstelle. Also com öffenen und in der dauerschleife warten bis was kommt.
Ganz so einfach scheint es mit der Socketverbindung dann auch nicht zu sein. Ich sehe hier keinen Fehler wie so das ganze vielleicht dreimal geht, und dann plötzlich nicht mehr.
Hat jemand eine Idee?
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: SocketVerbindung

Beitrag von AUGE_OHR »

Bernd Reinhardt hat geschrieben: Di, 30. Jan 2018 19:47 Ich habe ein Problem mit der Socketverbindung. (Version 1.9 SL1)
und unter welchem OS() :?:
gruss by OHR
Jimmy
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: SocketVerbindung

Beitrag von Bernd Reinhardt »

XP und WIN 10
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: SocketVerbindung

Beitrag von Bernd Reinhardt »

Hallo.

Gibt es günstige AddOn für Xbase++ 1.9 Service Level 1 mit der man solch eine Lösung machen könnte?
Socket öffnen und warten was so kommt.
Aktuell habe ich das so gemacht das ich nach 20sec die Socketverbindung schließe und wieder neu aufbaue. Ist halt auch nicht gerade toll.

Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: SocketVerbindung

Beitrag von Jan »

Warum? Ich mache in einer Anwendung (Tickets auf einem KNX-Bus auslesen) auch den Socket auf und lese, was da so kommt. Wie lang die Pausen dazwischen jeweils sind ist mir egal. Wobei die zugegebenermaßen auch meistens eher kürzer sind.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: SocketVerbindung

Beitrag von Bernd Reinhardt »

Jan

Was mache ich dann falsch. Hast du dir mal meinen Code angeschaut.
Sendest du auch was oder empfängst du nur.
Wie erkennst du wenn die Verbindung verloren geht.
Meine Überlegung war den Blockingmode auszuschalten, dann bin ich in einer Endlosschleife.
Falls die Verbindung verloren geht kann ich versuchen diese neu aufzubauen.

Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: SocketVerbindung

Beitrag von Werner_Bayern »

Servus,
cBuffer := space(40)
nBytes := SocketRecv( nSocket, @cLength, 44, ,@nError )
Liegts daran, dass Du vermutlich cLength mit cBuffer verwechselst, cBuffer mit 40 Zeichen initialisierst, aber 44 Zeichen eingelesen werden sollen?
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten