Hänger beim senden eines Leeren Strings?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hi,

also erst mal hier mein erstes Python socket Programm:
Server:

Code: Alles auswählen

# TCP server example
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("localhost", 5000))
server_socket.listen(1)

print "TCPServer Waiting for client on port 5000"
while 1:

        try:
                client_socket, address = server_socket.accept()
                print "I got a connection from ", address
                while 1:
                        data = client_socket.recv(512)
                        print "RECIEVED:" , data
                        client_socket.send("RECIEVED:")
        except socket.error:
                print "Lost connection from ", address

Client:

Code: Alles auswählen

# TCP client example
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 5000))
while 1:
        data = raw_input ( "SEND:" )
        client_socket.send(data)
        data = client_socket.recv(512)
        if not data == "RECIEVED:":
            print "Error"

            
Wenn ich jetzt im Client einfach nichts Eingebe und einfach "Enter" drücke bekommt der Server das zwar mit, danach hängt aber der Client und nimmt nichts mehr an.

Und was ganz nebenbei, kennt einer ne Möglichkeit das ganze schöner zu machen?
Der Server soll später mal auf meinem Router laufen und dann über USB einen Arduino steuern.
Also einfache Befehle entgegen nehmen und hin und wieder was zurück schicken.
Ist schon etwas länger her das ich was mit Sockets gemacht habe (VB6 Zeiten...) aber da war es ganz schön gelöst da man da einfach zum empfangen eine Routine hatte die immer ausgeführt wurde wenn etwas empfangen wurde. Gibt es so was nicht in Python? Also einfach eine der Routinen mit meinem eigenen Code überschreiben damit ich mir das abfragen nach dem Empfangenen sparen kann?

MfG



p90
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Was heisst "hin und wieder was zurueckschicken"? Wenn das Zurueckschicken stets als Antwort auf eine Anfrage kommt, wuerde fuer das Ganze XML-RPC nehmen. Ansonsten waeren asyncore/asynchat mal einen Blick wert.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hi,

also immo sieht das so aus das ich nicht jedesmal eine Antowr brauche.
Mache es zwar immo so einfachum ne Rückmeldung im Client zu habe das es auch angekommen ist.

Wie gesagt, später soll der Server auf nem Wlan Router laufen und an den Arudino Bewegunsinfos (also eins nach links, eins nach rechts, vorwärts etc).
Würde dann gerne immer die Drehzahl der Motoren, Akku etc. zurück übertragen.

[EDIT]
Lese gerade etwas zu asynchat.
Das sieht doch schon so aus wie das was ich brauche...

Würde trotzdem gerne wissen was da oben bei Leerer Eingabe passiert.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Der Client hängt sich nicht auf sondern, wartet bis er eine Antwort bekommt. Btw. Asynchat funktioniert nicht so toll, manchmal verschluckt es nachrichten.
the more they change the more they stay the same
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Okay, wenn der Clienat auf Antwort wartet versteh ich es noch weniger.
Wie gesagt, der Server printet mir ja ein "RECIEVED:", hat also die Nachricht, auch wenn sie nichts enthält bekommen.
Er führt auch das print aus aber dann die nächste Zeile die dem Client die Antwort sendet nicht mehr?

[EDIT]
Arg, gerade mal ein paar tipos raus genommen...
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Rebecca hat geschrieben:Was heisst "hin und wieder was zurueckschicken"? Wenn das Zurueckschicken stets als Antwort auf eine Anfrage kommt, wuerde fuer das Ganze XML-RPC nehmen. Ansonsten waeren asyncore/asynchat mal einen Blick wert.
also immo sieht das so aus das ich nicht jedesmal eine Antowr brauche.
Mache es zwar immo so einfachum ne Rückmeldung im Client zu habe das es auch angekommen ist.
Was ich ausdruecken wollte ist, dass ein XML-RPC-Server nur auf Client-Anfragen reagieren kann und dann Ergebnisse zurueckschicken kann. Er kann nicht einfach von sich aus den Client kontaktieren. (Vergleichbar mit einem Webserver.) Wenn das fuer deinen Zweck in Ordnung ist, wuerde ich definitiv XML-RPC empfehlen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hi,

das verstehe ich leider nicht genau.
Aslo was ich halt gerne haben möchte ist das.

Ich hab nen Server, der lauscht immer.
Dann connecte ich mit dem Client.
Und dann sollen die beiden einfach zu jeder Zeit Daten austauschen können.
Z.B. schickt der Server den momentanen Akku Ladezustand oder so und der Client sendet nur dann was wenn der User das auch will.
Antworten