2016-07-14 5 views
1

Ich verwende ein UDP-Socket-Programm für eines meiner Projekte, um eingehende Daten von einem EEG-Headset einzulesen. Ich benutze diese Daten dann, um Servomotoren in einem Roboterarm zu steuern. Der Code, den ich verwende, um den Socket zu erstellen und die Daten auszudrucken, funktioniert einwandfrei.Wie filtere ich eingehende Daten von einem Socket in Python?

import socket 
import subprocess 

UDP_IP = "169.254.110.133" 
UDP_PORT = 50000 

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

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

Die Daten, die in kommen, sind Roh-EEG-Daten aus dem Headset und es sieht aus wie diese im Terminal:

SourceTime 31972 

TargetCode 1 

ResultCode 0 

Feedback 1 

PauseApplication 0 

CursorPosX 717 

CursorPosY 2047 

CursorPosZ 2047 

Diese Daten haben 33 verschiedene Abschnitte mit jeweils wenigen Millisekunden. Die Daten kommen immer in der gleichen Reihenfolge. Für meinen Code brauche ich nur ein paar Informationen aus den Daten (TargetCode, ResultCode und Feedback). Wie filtere ich diese Abschnitte heraus und verwende sie in meinem Code. Gibt es eine Möglichkeit, nach TargetCode zu suchen und die Nummer zu kopieren? Oder da TargetCode immer die Nummer 24 im Stream von 33 Sektionen ist, kann ich es auf diese Weise extrahieren?

Antwort

0

Dies könnte helfen.

Server

import socket    

s = socket.socket()   
UDP_IP = "169.254.110.133" 
UDP_PORT = 50000    
sock.bind((UDP_IP, UDP_PORT))   

s.listen(5)     
while True: 
    c, addr = s.accept()  
    c.send('Connected to server.') 
    c.close()   

Kunde

import socket    
UDP_IP = "169.254.110.133" 
UDP_PORT = 50000 
s = socket.socket()   
s.connect((UDP_IP,UDP_PORT)) 
print (s.recv(1024)) 
s.close      
+0

ich die Antwort zu schätzen wissen, aber das scheint nicht genau mein Problem zu beheben. Die Serverseite des Programms ist das EEG-Headset-Programm, das mich dazu auffordert, die IP- und Port-Nummer einzugeben, an die die Daten gesendet werden sollen. Auf der Client-Seite brauche ich einen Weg, um nur ein paar Daten aus dem eingehenden Datenstrom zu extrahieren. Gibt es eine Möglichkeit, dafür vielleicht eine for-Schleife zu verwenden? oder eine Art zu sagen, wenn es das Wort TargetCode sieht bekommen die Zahl danach? –

+0

Sie müssen also nur den Zielcode aus eeg extrahieren? Ist es eine Schnur? –

+0

Wenn es eine Zeichenkette ist, dann ist die Zahlenextraktion >> int (outputData.split ("\ n") [1] .split ("") [1]) –