Hallo,
ich bin recht neu in der Socket Programmierung mit Python und habe ein Problem mit einem Client Socket.
Ich würde gerne von einem Modul, welches über Ethernet angeschlossen ist Messwerte empfangen und dafür das TCP Protokoll nutzen. Ich habe mir die Tutorials soweit durchgeschaut und habe Testweise ein Server und einen Client programmiert und es funktioniert.
Nur funktioniert mein Client der die Messdaten von dem Modul streamen soll leider nicht. Ich stelle eine Verbindung her (IP von dem Modul und Port sind bekannt) und versuche die Messdaten zu empfangen:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_addr = ('192.168.2.244', 2101)
client_socket.connect(server_addr)
while True:
data = client_socket.recv(1024)
print(data)
Bin ich da voll auf dem falschen Trichter? Irgendwas ganz vertauscht?
Wenn ich über die Konsole eine Verbindung zu dem Modul herstellen, mit der gleichen IP und dem Port werden die Messwerte automatisch angezeigt Linie für Linie...
Vielen dank für die Hilfer.
Client Socket Daten auslesen
- __blackjack__
- User
- Beiträge: 13185
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@nikolaj87: „Line“ heisst in diesem Zusammenhang auf Deutsch „Zeile“ und nicht „Linie“.
Wie sieht denn der Server dazu aus? Und was heisst funktioniert nicht? Wenn es eine Ausnahme gibt, dann zeig den kompletten Traceback dazu. Wenn das irgendwo hängen bleibt, dann finde heraus wo das hängen bleibt. Einfach ein paar `print()`\s strategisch einstreuen.
Und wenn das dann mal funktioniert: Du brauchst sehr wahrscheinlich noch ein Protokoll um den Datenstrom dann tatsächlich auf einzelne Messwerte aufzuteilen. Und bevor Du so etwas selber machst, würde ich mich ja nach vorhandenen Protokollen umschauen und nicht das Rad selbst erfinden.
Wie sieht denn der Server dazu aus? Und was heisst funktioniert nicht? Wenn es eine Ausnahme gibt, dann zeig den kompletten Traceback dazu. Wenn das irgendwo hängen bleibt, dann finde heraus wo das hängen bleibt. Einfach ein paar `print()`\s strategisch einstreuen.
Und wenn das dann mal funktioniert: Du brauchst sehr wahrscheinlich noch ein Protokoll um den Datenstrom dann tatsächlich auf einzelne Messwerte aufzuteilen. Und bevor Du so etwas selber machst, würde ich mich ja nach vorhandenen Protokollen umschauen und nicht das Rad selbst erfinden.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
- DeaD_EyE
- User
- Beiträge: 1030
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Hast du die Dokumentation des Moduls? Die Messdaten müssen in irgendeiner Repräsentation gesendet werden.Ich würde gerne von einem Modul, welches über Ethernet angeschlossen ist Messwerte empfangen und dafür das TCP Protokoll nutzen.
Wenn du dich verbindest und dann nichts empfängst, wird das wohl daran liegen, dass das Modul keine Daten sendet.
So wie ich es kenne, macht man es folgendermaßen: Messdaten, die sehr oft gesendet werden, aber verloren gehen dürfen, sendet man über UDP
Beispiel: Ein Servomotor der seine Position mit 1000 Hz sendet.
Alles, dass zur Steuerung dient und/oder z.B. einen Messvorgang initiieren muss, wird über TCP abgewickelt. Dein Modul könnte ja z.B. ganz viele Messwerte erfassen.
Du musst also mit der Dokumentation herausfinden, was du senden musst, damit das Modul dir einen Messwert zurück liefert.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server