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:

Tolka oregelbunden data - Klient och Server

Inlägg av Al_Bundy »

Nu räckte inte titeln till och jag vet inte hur jag ska namnge problemet. Men låt oss säga att vi har två enheter.
Server A och klient B.

A skriver följande värden: 1,3, 5, 6, 1, 8 med ett värde i taget.
B läser utav hela tiden och det blir ibland: 0003005000600060001 eller 1003005006001008 eller 6001008

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?

Jag har byggt Pythonkod för att läsa utav signaler från en server:

Kod: Markera allt

import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 5000        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    data = s.recv(1024)

print('Received', repr(data))
/usr/bin/python3.6 /home/asus/Dokument/PycharmProjects/StepBasedRealization/SBR.py
Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07'

Process finished with exit code 0
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45174
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av TomasL »

Du får väl debugga.
Utan kännedom om system, kod etc är det fullständigt omöjligt att svara på.Ett tips är att använda wireshark på både klient och serverdatorer.
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 »

Vadå omöjligt att svara på?

Om du skulle få detta:

Kod: Markera allt

Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00'
Received b'\x00'
Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00'
Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07'
Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00'
Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07'
Received b'\x00\x00'
Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07'
Och du vet i vilken turordning som den skickar data. Problemet är att du läser datan inte jämnt. Tror du att det skulle vara bra om man programmerade så att man endast godkände full data i en enda inläsning? T.ex.

Kod: Markera allt

Received b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07
Eller finns det bättre sätt? En teori jag har är att läsa in denna "hex-sträng" och börja räkna x00. Efter varje tredje x00 så läs in ett tal. Men då finns risken att jag läser inte all data samtidigt. Vad säger den goda erfarenheten?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45174
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Tolka oregelbunden data - Klient och Server

Inlägg av TomasL »

Naturligtvis är det omöjligt, det finns en miljon olika saker som kan vara fel, från det enkla faktum att servern faktiskt skickar något helt annat, än vad du tror den gör.

Till det att det programmet du skrivit gör något helt annat än du tänkt dig, och följaktligen lurar dig.

Finns detta program på din "server" eller är det Klientdatorn.
Skickar servern data till LocalHost? I såfall lär din klientdator inte kunna ta emot någonting.
Senast redigerad av TomasL 15 november 2018, 21:47:54, redigerad totalt 1 gång.
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 »

Skickar servern "records" med sex heltal i varje? Dvs betyder dessa heltal olika saker?
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 »

TomasL skrev:Naturligtvis är det omöjligt, det finns en miljon olika saker som kan vara fel, från det enkla faktum att servern faktiskt skickar något helt annat, än vad du tror den gör.

Till det att det programmet du skrivit gör något helt annat än du tänkt dig, och följaktligen lurar dig.

Finns detta program på din "server" eller är det Klientdatorn.
Skickar servern data till LocalHost? I såfall lär din klientdator inte kunna ta emot någonting.
Det är servern som skickar just nu. Allt är på localhost.
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 »

lillahuset skrev:Skickar servern "records" med sex heltal i varje? Dvs betyder dessa heltal olika saker?
Så här ser sendarkoden ut:

Kod: Markera allt

/*
	 * Send data
	 */
	public void sendData(int[] data) {
		System.out.println("senData");
		try {
			for (int i = 0; i < data.length; i++) {
				dataOutputStream.writeInt(data[i]);
				dataOutputStream.flush();
			}
		} catch (SocketException e) {
			System.out.println(e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
Den skickar en array för varje element.
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 »

Kan du inte bara besvara frågan så slipper jag läsa din kod?
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 »

Vad du behöver göra är att lägga till någon slags header och ev. Footer i varje datapaket, för att få programmet att kunna hålla koll på när ett paket börjar och slutar.
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 kommer aldrig skicka -1. Så det kanske är ett alternativ?

-1 data -1

?
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 »

lillahuset skrev:Kan du inte bara besvara frågan så slipper jag läsa din kod?
Min kod skickar alltså en array för varje element. Där efter så läser klienten min data också. Ibland hinner klienten läsa för snabbt och då blir det bara halva meddelandet.
sc3
Inlägg: 173
Blev medlem: 10 januari 2011, 11:05:40
Ort: Umeå

Re: Tolka oregelbunden data - Klient och Server

Inlägg av sc3 »

Ditt ena problem med ’nollorna’ beror nog på att du skickar Java int som är 32bitar/4bytes. Och i Python läser du strängar/characters/1byte/8bitar. Därför får du nollor också.
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 »

Skulle det inte fungera om man skickade en komplett data istället?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Tolka oregelbunden data - Klient och Server

Inlägg av johano »

Al_Bundy skrev:Jag kommer aldrig skicka -1. Så det kanske är ett alternativ?

-1 data -1

?
Du vill definitivt ha *olika* tecken för start och slut!
sc3
Inlägg: 173
Blev medlem: 10 januari 2011, 11:05:40
Ort: Umeå

Re: Tolka oregelbunden data - Klient och Server

Inlägg av sc3 »

Svårt att veta vad du menar när vi varken vet vad du ska göra eller ser komplett kod. Läs på lite om hur du ska hantera läsningen av socketen i python
Skriv svar