Tolka oregelbunden data - Klient och Server

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av Al_Bundy »

Så Jan. Hur skulle du ha löst det?
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Tolka oregelbunden data - Klient och Server

Inlägg av Icecap »

Basen i en säker överföring är tänket om att sker överföringen via en kabel ska det vara möjligt att klippa av kabeln och sedan återansluta den utan att det blir tolkat i form av halva paket osv.

Uppdelningen kan göras på många olika sätt, t.ex. använder MODBUS tid (det ska alltså gå 2+ bytes tid utan data för att separera olika paket] medan andra använder t.ex. CRLF som tecken på att det är slutet av ett block.

I fall med nätverkskommunikation ska man "bara" ta höjd för att man kan få olika delar av varje datablock vid olika tider vilket betyder att man bör ha en start- och slutmarkering och sedan data däremellan.

I ditt fall verkar problemet i grunden vara att du inte är säker på vad som skickas, något som definitivt är vad jag upplevde med ett projekt där "min" ųC skulle prata med ett Java-program. Jag fick anpassa "min" ända till vad Java klarade att skicka, det var problem med variabelstorlekar, endian ock lite andre småsaker.

Men det var lugnt, det kostade bara en dags programmering extra och jag fick ju betalt för tiden.

Att jobba INTERNT i ett program med att överföra data med strängar är inte effektivt - men det kan vara ganska effektivt MELLAN program! Helt enkelt för att det - rätt designad - fungerar bra. Javisst, hastigheten kanske inte är på max men om man behöver skyffla mycket data mellan två program med hög hastighet ska man kolla igenom lösningen en extra gång för att kolla om det verkligen är löst på ett vettigt sätt.

Det är även kul att du frågar sodjan om hur han skulle lösa problemet - TROTS att du har fått ett flertal beskrivningar som i stort är mycket lika. Förstår du inte vad som skrivs?
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Tolka oregelbunden data - Klient och Server

Inlägg av svanted »

alltså...
Alltså det kommer oregelbundet data hela tiden i olika längder. Bästa vore om man hela tiden kunde få data som var 1003005006001008, men det får jag sällan.

Hur hade ni löst detta?
du skickar antaglien en int() som är 32 bitar
men läser av med 8 bitar

hur tycker du själv att man löser problemet?
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Tolka oregelbunden data - Klient och Server

Inlägg av Rick81 »

Är det bara jag som får deja vu efter en liknande tråd med kommunikation via AVR och PC via USB Uart?

Al: hur löste du det? Du kan nog körra samma lösning här
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av Al_Bundy »

Jag skickade en sträng med "-" som mellanrum och där efter när jag tog emot strängen så delar jag upp den. Två två rader kod.
Användarvisningsbild
AndLi
Inlägg: 17045
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av AndLi »

Mtp hur populärt json och xml är i moderna lösningar tycker jag att strängar verkar mer och mer modernt.....
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av TomasL »

Kan så vara, men man brukar inte skicka det, xml och json används väl i stället för text-filer för inställningar och liknande.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Tolka oregelbunden data - Klient och Server

Inlägg av Klas-Kenny »

Json skickas oerhört mycket. En hel del XML också, men särskilt JSON.

Tex där mqtt används, så är JSON i det närmaste standard, och på en hel massa andra ställen. Bakomliggande i JavaScript (AJAX) tex.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Tolka oregelbunden data - Klient och Server

Inlägg av lillahuset »

Brukar man inte skicka strängar?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av TomasL »

Jo förvisso, rent tekniskt sett, men ofta inte klartext, om det inte är en webserver eller liknande.
Användarvisningsbild
AndLi
Inlägg: 17045
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av AndLi »

TomasL skrev:Kan så vara, men man brukar inte skicka det, xml och json används väl i stället för text-filer för inställningar och liknande.
Tycker varenda API man använder mot något nätverksanslutet nuförtiden kör json.
Men det handlar säkert väldigt mycket i vilken miljö man rör sig...
mounte
Inlägg: 204
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Tolka oregelbunden data - Klient och Server

Inlägg av mounte »

En av funderingarna jag har är varför du flushar efter varje byte. Om du flushar efter att du skickat alla dina bytes så är sannolikheten mycket stor att dom kommer som en klump.

För att öka robustheten på mottagarsidan (utan att tänka på integritet av data etc. etc.) så kan du i stort följa exemplet på https://docs.python.org/3.3/howto/sockets.html

Kod: Markera allt

    def myreceive(self, msg=b''):
        while len(msg) < MSGLEN:
            chunk = self.sock.recv(MSGLEN-len(msg))
            if chunk == b'':
                raise RuntimeError("socket connection broken")
            msg = msg + chunk
        return msg
dvs. ha en buffer som du fyller på tills att längden på den blir lika med eller större än önskat meddelande.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av Al_Bundy »

Finns det inte en sannolikhet också att om jag skriver data - flush och sedan skriver data -flush. Då kommer python läsa allt på en gång?

Ditt exempel ska jag testa! :)
Skriv svar