UDP-sockets kein Empfang

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
MLude
User
Beiträge: 5
Registriert: Dienstag 20. August 2013, 15:41

Hallo zusammen,
ich will Daten aus einem Ladungsverstärker (LV) per UDP-socket auslesen. Mit Telnet kann ich das Daten-Streaming aktivieren, allerdings kann ich im Anschluss keine Daten auf dem socket empfangen (timeout). Wenn ich allerdings Daten über den socket sende kann ich diese empfangen.

Dass der LV keine Daten streamt kann ich ausschließen, da mit einem vom Hersteller mitgelieferten Tool das streamen (mit den exakt gleichen Einstellungen) möglich ist.

Hat jemand eine Idee, woran das liegen könnte?

Die Netzwerkadressen sind die folgenden:
IP des Rechners (Win64): 169.254.114.10
UDP-Port: 12345
Standardgateway:momentan 169.254.114.1 (aber auch schon andere probiert, die nicht mit dem LV übereinstimmen)
IP des LV: 169.254.114.1
Port Telnet: 23
Subnet: 255.255.255.0

Code: Alles auswählen

Hier mein Code:
import sys
import telnetlib
import socket

class UDPTelnet(object):
    def __init__(self, host, port): 
        self.tel = telnetlib.Telnet(HOST, port) 
        self.lese_daten()

    def close(self): 
        self.tel.close()

    def lese_daten(self): 
        return self.tel.read_until(".\r\n", 0.1)

    def kommando(self, kom): 
        self.tel.write("%s\r\n" % kom)
        return self.lese_daten()
    
    def reset(self):
        self.kommando("RESET=0,1")
        print self.kommando("RESET=0,1")
        self.kommando("RESET=1,1")
        print self.kommando("RESET=1,1")


HOST = "169.254.114.1"
port = "23"

tn = UDPTelnet(HOST, port)

#tn.lese_daten()

tn.kommando("DATA_STREAM_ENABLED=1")
print tn.kommando("DATA_STREAM_ENABLED=1")
tn.reset()


## UDP 
UDP_IP = '169.254.114.10'
UDP_PORT = 12345


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

sock.settimeout(1)

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "received message:", data
    
 
#Verbindungen schließen
sock.close()

###DATA STREAMING BEENDEN
tn.kommando("DATA_STREAM_ENABLED=0")
print tn.kommando("DATA_STREAM_ENABLED=0")

tn.close()
Zuletzt geändert von Anonymous am Donnerstag 6. Februar 2014, 10:03, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@MLude: So auf Anhieb stellt sich mir die Frage ob die Gegenseite es mag das Du über Telnet alles doppelt schickst?
MLude
User
Beiträge: 5
Registriert: Dienstag 20. August 2013, 15:41

Stimmt, das nehm ich natürlich wieder raus. Aber das kann ja nicht der Fehler sein, warum auf dem socket keine Daten ankommen, oder?
BlackJack

@MLude: Man könnte die UDP-Socket mal allgemein an alle Interfaces binden, also die IP als leere Zeichenkette übergeben. Und dann stelle ich mir gerade die Frage wo Du dem LV sagst an welche IP die UDP-Pakete geschickt werden sollen‽

Das ``tn.reset()`` in Zeile 37 führt aber keinen Reset aus der auch das Datastreaming wieder abschaltet, oder?
MLude
User
Beiträge: 5
Registriert: Dienstag 20. August 2013, 15:41

Hallo BlackJack, das mit dem an alle Interfaces binden habe ich auch schon probiert, leider ohne Erfolg. Die IP, an die die UDP-Pakete geschickt werden sollen, wird im LV eingegeben und ist die IP meines Rechners.
Nein, reset() nullt mir nur den angeschlossenen Sensor.
Ich bin mittlerweile ratlos :K
Antworten