Python Forum
Reading UDP from external device without device software - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Reading UDP from external device without device software (/thread-22913.html)



Reading UDP from external device without device software - ikdemartijn - Dec-03-2019

Hello everyone,

Before I get to my actual problem, here is some background for the project in which this problem occurs:
I am trying to control a microcontroller, based on the data coming from a sensor. This sensor is not compatible with the microcontroller, since it is a fibre optic sensor. An external device, an interrogator, has to be used to extract the data from the sensor. This interrogator will send data to an included software on my laptop.
I traced the datastream with Wireshark and decoded the sent bytes. The dataprotocol used for this data is UDP.

Now the problem: I need to read the incoming data using python so I can make the microcontroller respond to changing sensorvalues. The interrogator sends the data to 10.0.0.37 port 30002 from 10.0.0.150 port 30071. If I kill the included software with taskmanager, the port opens up for python and the datastream continues according to Wireshark. However, my code does not read the data. (code below). The incoming data are UDP packets of 1488 bytes for the total package and 1444 bytes for the actual data.

import socket
import time
 
port = 30002  # Port to receive data on

bufferSize = 2048 # buffer size
 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('',port))
s.setblocking(0)
 
while(1):
    try:
        result = select.select([s],[],[])
        msg = result[0][0].recv(bufferSize) 
        print (msg)
        time.sleep(1)
    except:
        print('failed to receive data')
        time.sleep(1)
Does anybody have any suggestions how to collect the data from port 30002?


RE: Reading UDP from external device without device software - ikdemartijn - Dec-03-2019

I figured it out! Pardon me for replying on my own post but I thought people might appreciate it if they ever stumble upon this same problem ;) See below for the code I used:
import socket

UDP_IP = "10.0.0.37" #the IP of the ethernetport of the pc
UDP_PORT = 30002  # the receiving port on the pc

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(4096) # buffer size is 4096 bytes
    print("received message:", data)
replace the UDP_IP and UDP_port with your own values ofcourse


RE: Reading UDP from external device without device software - Larz60+ - Dec-03-2019

Quote: Pardon me for replying on my own post but I thought people might appreciate it if they ever stumble upon this same problem
No pardon necessary, Thank You, we are grateful when answers are shared.