Socket Message Listen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
petergraef
User
Beiträge: 2
Registriert: Montag 26. November 2007, 10:39

He, liebe Python-Freaks,

ich programmiere ein Spiel (Schiffeversenken) und kümmere mich um die Netzwerkklasse!

Folgendes Problem:

ich möchte eine Nachricht an den Server senden, zb aus einer Liste und die kommende Antwort vom Server (server hat automessage_back) auch in eine liste packen, weiß aber net wie!

code:

Code: Alles auswählen

from socket import *

class network():

    def __init__(self):
        #SOCKET.__init_()
                
        SERVER_PORT = 50007
        BUFSIZE = 1024

        print "Server Addresse: "
        host = raw_input()

        '''
        print
        print "Nachricht: "
        msg = raw_input()
        '''
        msg=
   
        s = socket(AF_INET, SOCK_STREAM)# Ein INet Streaming (TCP/IP) Socket erzeugen
        s.connect((host, SERVER_PORT))  # Zum Server verbinden
        s.send(msg)                     # Unsere Nachricht senden
        data = s.recv(BUFSIZE)          # Auf Daten vom Server warten
                                        # Daten anzeigen
        print
        print "Daten: %s" % (data)

        
        s.close()                       # Socket schliessen

test=network()

mfg peeeeeter^^
BlackJack

Falls ich die Frage richtig verstehe, ist das `pickle`-Modul die Antwort. Damit kann man Python Objekte in Zeichenketten umwandeln, was ja nichts anderes als Bytes sind, und wieder in die andere Richtung.

Allerdings ist Socketprogrammierung nicht so leicht, Du solltest vielleicht besser auf ein höheres Protokoll setzen. Zum Beispiel ist nicht garantiert, dass bei einem `recv()` wirklich die komplette Nachricht ankommt, d.h. man muss solange lesen bis die Gegenseite die Verbindung schliesst, oder am Anfang jeder Nachricht übertragen wieviele Bytes folgen und solange lesen bis auch wirklich so viele Bytes gelesen wurden, oder man muss eindeutige Endkennzeichen nach der Nachricht einfügen, die *in* der Nachricht nicht auftauchen dürfen.

XML-RPC ist zum Beispiel einfacher zu benutzen, als selber Protokolle über Sockets zu erfinden.
Antworten