[Python] UDP packets van remote IP ontvangen

Pagina: 1
Acties:

Vraag


  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 02-10 14:23

Shapeshifter

Get it over with

Topicstarter
Ik heb een GPS ontvanger waarmee ik via ethernet data uit kan lezen. Als ik bijv. Putty gebruik om verbinding te maken (zeg op 1.2.3.4 en poort 3000) dan zie ik meteen een hoop data binnen komen, dus alles is goed verbonden.

Nu wil ik de data met Python binnenhalen, maar ik krijg het maar niet voor elkaar. Ik dacht dat ik gewoon de poort op mijn machine moest binden en dat hij dan vanzelf zou moeten zien dat er iets binnen komt. Zoiets:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.bind(('', 3000))

while True:
    data, addr = sock.recvfrom(256)
    
    print(data)

sock.close()


Helaas gebeurt er dan niets, hij blijft hangen op sock.recvfrom(256) omdat die blocking is. Voor de grap geprobeerd om op het IP van de ontvanger te binden: sock.bind(('1.2.3.4', 3000)) maar daar wordt Python niet blij van.

Dus ik dacht, misschien heb ik het gewoon verkeerd begrepen en moet ik connect gebruiken en een dummy bericht sturen om data te krijgen ofzo:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.connect(('1.2.3.4', 3000))

sock.sendall(b"")

data = sock.recv(256)

print(data)

sock.close()


Maar die blijft ook hangen op sock.recv(256). Ik snap er duidelijk niets van, dit zou toch simpel moeten zijn |:( Iemand een idee?

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m

Beste antwoord (via Shapeshifter op 23-09-2020 13:20)


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Als ik bijv. Putty gebruik om verbinding te maken (zeg op 1.2.3.4 en poort 3000) dan zie ik meteen een hoop data binnen komen, dus alles is goed verbonden.
Dat klinkt als TCP, niet als UDP?

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Als ik bijv. Putty gebruik om verbinding te maken (zeg op 1.2.3.4 en poort 3000) dan zie ik meteen een hoop data binnen komen, dus alles is goed verbonden.
Dat klinkt als TCP, niet als UDP?

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 02-10 14:23

Shapeshifter

Get it over with

Topicstarter
ValHallASW schreef op woensdag 23 september 2020 @ 13:01:
[...]


Dat klinkt als TCP, niet als UDP?
Hmm, volgens de manual is het UDP, maar ik begin er nu ook aan te twijfelen ja...

Ga toch maar even TCP proberen dan...

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Ik heb je code even lokaal getest met een UDP broadcast, en werkte daar naar behoren (moest wel de buffer size aanpassen naar een grotere waarde -- ik kreeg een OSError: [WinError 10040] A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself). Je code is dus niet het probleem :)

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 02-10 14:23

Shapeshifter

Get it over with

Topicstarter
[een aantal lelijke woorden] het is inderdaad TCP. Dit werkt naar behoren:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect(('1.2.3.4', 3000))

counter = 0

while counter < 100:
    data = sock.recv(256)
    print(data)
    counter += 1

sock.close()


Ik ga even een hartig woordje praten met iemand... Thanks allemaal!

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m