Sida 1 av 4

Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 20:40:34
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

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 21:13:49
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.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 21:27:41
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?

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 21:40:49
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.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 21:47:11
av lillahuset
Skickar servern "records" med sex heltal i varje? Dvs betyder dessa heltal olika saker?

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 21:59:15
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.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:00:50
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.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:13:25
av lillahuset
Kan du inte bara besvara frågan så slipper jag läsa din kod?

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:33:25
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.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:35:40
av Al_Bundy
Jag kommer aldrig skicka -1. Så det kanske är ett alternativ?

-1 data -1

?

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:36:52
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.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:39:34
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å.

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:45:28
av Al_Bundy
Skulle det inte fungera om man skickade en komplett data istället?

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:47:32
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!

Re: Tolka oregelbunden data - Klient och Server

Postat: 15 november 2018, 22:48:50
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