Client Socket Daten auslesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nikolaj87
User
Beiträge: 1
Registriert: Donnerstag 28. März 2019, 11:24

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.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Was tut denn nicht? Also was wird ausgegeben? Fehler?
Um TCP benutzen zu können, mußt Du ein Protokoll definieren und implementieren. Es hört sich so an, als ob Du ein zeilenbasiertes Protokoll benutzt?
Benutzeravatar
__blackjack__
User
Beiträge: 13077
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich würde gerne von einem Modul, welches über Ethernet angeschlossen ist Messwerte empfangen und dafür das TCP Protokoll nutzen.
Hast du die Dokumentation des Moduls? Die Messdaten müssen in irgendeiner Repräsentation gesendet werden.

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
Antworten