Hallo, ich experimentiere gerade mit socket und hab mir ein kleinen tcp-server u. -client gebastelt der einfach nur nachrichten empfängt und der client welche verschickt
client
....
nachricht = raw_input("Nachricht: ")
s.send(nachricht)
server
.....
nachricht = sock.recv(1024)
Wie kann ich dem Server auch weitere Information mitschicken wie z.B. Username
Muss ich das mit in die Nachricht mitsenden und dann beim server selber rausparsen?
Hab schon versucht einfach ne Liste zu schicken info_list = (username, nachricht) und es dann einfach so auch auszulesen aber das geht nicht man kann anscheinend nur nen string schicken
daten aufsplitten
Hallo.
Du musst Benutzernamen etc. in die versendeten Daten so mit einbauen, dass du die Nachricht beim Empfänger wieder in die Einzelteile zerlegen kannst. Das kannst du entweder kompliziert (und fehleranfällig) per Hand machen oder du verwendest einen vorhandenen Serialisierer. An deiner Stelle würde ich ein Dictionary mit den Einträgen Name und Nachricht erstellen, dies durch das json-Modul jagen und den erzeugen String verschicken. Beim Emfänger dann entsprechend umgekehrt.
Sebastian
Du musst Benutzernamen etc. in die versendeten Daten so mit einbauen, dass du die Nachricht beim Empfänger wieder in die Einzelteile zerlegen kannst. Das kannst du entweder kompliziert (und fehleranfällig) per Hand machen oder du verwendest einen vorhandenen Serialisierer. An deiner Stelle würde ich ein Dictionary mit den Einträgen Name und Nachricht erstellen, dies durch das json-Modul jagen und den erzeugen String verschicken. Beim Emfänger dann entsprechend umgekehrt.
Sebastian
Das Leben ist wie ein Tennisball.
@Sync32: Genau genommen kannst Du über eine Socket-Verbindung nur einen Bytestrom versenden, also auch Binärdaten. Das bedeutet vor allem auch, dass Du Dich beim Versenden von Zeichenketten selbst um die korrekte Kodierung kümmern musst.
Letztlich ist das aber doch egal, da Du in eine Bytefolge ja beliebige Daten verpacken kannst, solange nur beide Endpunkte wissen, wie sie die Daten aus der Bytefolge extrahieren können.
Letztlich ist das aber doch egal, da Du in eine Bytefolge ja beliebige Daten verpacken kannst, solange nur beide Endpunkte wissen, wie sie die Daten aus der Bytefolge extrahieren können.
Du kannst auch mehrere Nachrichten senden. Um die einzelnen identifizieren zu können musst du halt ein Trennzeichen verwenden oder eine Art von Protokoll entwerfen.Sync32 hat geschrieben:Ok aber fakt ist, dass ich letzendlich nur einen String rübersenden kann...richtig?
Eine Lösung wäre es, die Länge der Nachricht als eine Art Header zu verschicken. Dazu musst du diese in eine feste Länge verpacken, dazu nimmt man struct. Ein Beispiel daür gibt es in der stdlib, der SocketHandler der logging-Bibliothek:
Senden: http://hg.python.org/cpython/file/b4525 ... rs.py#l504
Empfangen: http://docs.python.org/howto/logging-co ... -a-network
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Die Warnung am Anfang der Pickle-Dokumentation hast Du gelesen und verstanden?
Wenn Du pickle nutzen möchtest, um Daten über eine unsichere Leitung zu versenden, dann ist es dringend ratsam, diese Daten mittels hmac gegen Manipulationen zu schützen oder zu verschlüsseln.
Als sichere Alternative bietet sich das bereits erwähnte JSON an.
Wenn Du pickle nutzen möchtest, um Daten über eine unsichere Leitung zu versenden, dann ist es dringend ratsam, diese Daten mittels hmac gegen Manipulationen zu schützen oder zu verschlüsseln.
Als sichere Alternative bietet sich das bereits erwähnte JSON an.
@Sync32: Wie stellst Du sicher dass der Empfänger die ganze Nachricht hat, bevor Du "entpickelst"?
Oder eine sichere unpickling-Methode verwenden: s. http://docs.python.org/py3k/library/pic ... ng-globalslunar hat geschrieben:Wenn Du pickle nutzen möchtest, um Daten über eine unsichere Leitung zu versenden, dann ist es dringend ratsam, diese Daten mittels hmac gegen Manipulationen zu schützen oder zu verschlüsseln.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
An dieser Stelle kommen dann Messageques wie 0MQ ins Spiel. Gerade im Vergleich zu AMQP interessant, eben weil es fast auf der Ebene von sockets ist aber den Bytestrom in Nachrichten kapselt.ms4py hat geschrieben:Du kannst auch mehrere Nachrichten senden. Um die einzelnen identifizieren zu können musst du halt ein Trennzeichen verwenden oder eine Art von Protokoll entwerfen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice