socket recv

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich habe das Problem, dass ich zwei Nachrichten ueber sockets versende und diese dann als eine ankommen (und das auch nicht immer):

Code: Alles auswählen

#client
socket.send('a')
socket.send('b')

#server
print socket.recv(1024)
#manchmal
'ab'
#manchmal
'a'
'b'

Ich hätte es gerne, dass ich für jedes send auch am ende ein recv zum verarbeiten zuständig ist.

Wie kann ich das Gewährleisten?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Gar nicht.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Gut. Danke.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Dazu musst du schon im OSI-Layer eine Stufe höher wandern.

Je nach Anwendung HTTP, XML-RPC, Pyro (PythonRemoteObjects), etc...
Wenn du mal deine Anforderungen genauer definierst, können wir hier konkreter werden.

Oder du definierst dein eigenes Protokoll, damit du die einzelnen Nachrichten unterscheiden kannst.
Reicht ja im Prinzip ein simpler XML-Tag:

Code: Alles auswählen

<message>a</message><message>b</message>
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich schicke JSON-Strings übers Netzwerk.

Ich dachte ich könnte einfach pro recv einmal die Daten decoden und dann mit ihnen weiter verfahren.

Allerdings schimpft json bei `{...}{...}`.

Ich hatte gehofft es funktioniert so, ohne da noch etwas drumherumbauen zu müssen.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Verwendest du json nur um die Daten zu verpacken und dann zu versenden?

Wenn ja, wäre XML-RPC oder Pyro eine gute Alternative, diese Technologien abstrahieren das Encoden und Decoden in eine zur Übertragung nötigen Darstellungsform.

Edit: Im Modul ``logging`` hab ich gerade noch einen interessanten Ansatz entdeckt, um das Problem zu lösen, die Länge der Nachricht wird als ``struct`` verpackt gesendet und dann die Nachricht. Dann wird nur so viel vom Socket gelesen wie die übermittelte Länge. Hier der Link:
http://docs.python.org/dev/library/logg ... -a-network
Gemeint ist natürlich die Methode "LogRecordStreamHandler.handle"
(Falls du damit nichts anfangen kannst, kann ich es auch genauer erläutern.)
Antworten