Brauche Hilfe bei Synapse

Alle Fragen zur Netzwerkkommunikation
Antworten
braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Brauche Hilfe bei Synapse

Beitrag von braspi »

Hallo Mitstreiter,
ich brauche eine Rückmeldung von einer UDP-Verbindung.
Bei Windows + Delphi + Indy kann ich auf ein ESP8266 die Anfrage stellen z.B. 40000 und erhalte enen Wert/String von dem ESP-Modul zurück.
Bei Raspi + Lazarus + Synapse kommt der Antwort-Wert/String nicht zurück.
Windows : sende 4000 an '192.168.3.47' Port '90' und nach dem Empfang des ESP liefert der den Wert/String zurück
sende 4100 an .. und der ESP schaltet = alles ist super
Raspi : sende 4100 an ... und der ESP schaltet = alles super, abe ich bekommen keine receive???

hier der Standard-Code für Lazarus mit Synapse :

Code: Alles auswählen

function TF_P02.SendData(sSend : string):string;
var
  sndsock : TUDPBlockSocket;
  rcvsock : TUDPBlockSocket;
  buf     : string;
begin
     sndsock := TUDPBlockSocket.Create;
     rcvsock := TUDPBlockSocket.Create;
 
     try
        sndsock.createsocket;
        rcvsock.CreateSocket;
 
        sndsock.Bind(gv.csIP,gv.ssPort);        //'0.0.0.0','0'); das sind meine Verbindungsdaten
        sndsock.MulticastTTL := 1;
        sndsock.connect(gv.csIP, gv.csPort);    //'234.5.6.7','22401');
        Assert(sndsock.LastError = 0);
 
        sndsock.SendString(sSend);
        buf:= sndsock.RecvString(600);               // es kommt NICHTs an
        // buf:= sndsock.RecvBlock(600);             // Fehler
        // buf:= IntToStr(sndsock.RecvInteger(600)); // irgendeine Zahl
 
        s_Memo.Lines.Add('rec ' + buf);
 
 
       rcvsock.Bind(gv.ssIP,gv.ssPort);
       rcvsock.AddMulticast(gv.csIP);              //'234.5.6.7');
       Assert(rcvsock.LastError = 0);
       s_Memo.Lines.Add('ress' + rcvsock.RecvString(600) );
       sndsock.CloseSocket;
       rcvsock.CloseSocket;
     finally
       sndsock.free;
       rcvsock.free;
     end;
 
  Result := buf;
 
end;


Wo ist mein Fehler und danke an den Helfer für mein Problem.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Brauche Hilfe bei Synapse

Beitrag von Christian »

RecvString empfängt bis zu einem Zeilenende.
Du musst den Aufbau deiner Zahl kennen. Kommt die als String an ? Wenn ja kommt noch was danach als Trennzeichen ?
Kommt die Binär an ? In welchem Format ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Brauche Hilfe bei Synapse

Beitrag von braspi »

Hallo Christian,

kann sein, dass nur das "StringEnde" fehlt. Bei Windows-Delphi-Indy funktioniert das auf Anhieb. Indy sendet aber auch einen String und mir fehlt wahrscheinlich im CharArray das Ende.
Vielen Dank für den Tipp.
Frohe Weihnachten für alle.

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Brauche Hilfe bei Synapse

Beitrag von braspi »

Frohe Weihnachten, hallo Christian,

habe den Code im Sketch für ESP8266 umgeschrieben und die Zeit ein wenig verlängert. Funktioniert super.

// c-Code für Arduino und Co
....
// Empfangsbestätigung wird an den Absender zurückgeschickt
// sind bei mir Messwerte und GPIO-Zustände für Raspii, PC und ESP8266

UdpS.beginPacket(UdpS.remoteIP(), UdpS.remotePort());
strcat(ReplyBuffer, "\r"); // + CR neuer Code
strcat(ReplyBuffer, "\n"); // + LF neuer Code
UdpS.write(ReplyBuffer);
UdpS.endPacket();
// ReplyBuffer auf -1 setzen
dtostrf(-1,6,0,ReplyBuffer);
...
Nochmals Danke und einen Guten Rutsch.

Antworten