Server und Client selber Rechner?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

Servus Leuts,

ich hab mal nach diesem Tutorial
http://openbook.galileocomputing.de/pyt ... 20_001.htm
mir versucht per TCP (punkt 20.1.3) ein simples Chatprogramm zu erstellen.

Wenn ich das jetzt aber starte, dann geb ich die IP-Adresse (127.0.0.1/localhost) ein und es kommt die Fehlermeldung
socket.error: (10061, 'Connection refused')
zurück.

Liegt das dadran dass Server und Client die selbe IP haben?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Umm, binde mal den Server nicht an "", sondern z.B. an "127.0.0.1".
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und wie immer: Das Openbook von Galileo ist nicht zu empfehlen. Gründe hierfür finden sich mittels der SuFu hier im Forum :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

@Dauerbaustelle: hab ich gemacht, das Ergebnis ist dasselbe.

@ Hyperion: Was empfiehlst du mir denn für Bücher?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Bist du dir sicher, dass das Server-Programm auch noch laeuft wenn du den Client startest und auch tatsaechlich auf dem Port lauscht? Funkt eine Firewall dazwischen?

Ansonsten: Poste deinen Code.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

dann machen wir das mal:

Also, hier erstmal der Server:

Code: Alles auswählen

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1", 50000))
s.listen(1)

try:
    while True:
        komm, addr = s.accept()
        while True:
            data = komm.recv(1024)
            
            if not data:
                komm.close()
                break
            
            print "[%s] %s" % (addr[0], data)
            nachricht = raw_input("Antwort: ")
            komm.send(nachricht)
finally:
    s.close()
und der Client:

Code: Alles auswählen

import socket

ip = raw_input("IP-Adresse: ")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, 50000))

try:
    while True:
        nachricht = raw_input("Nachricht: ")
        s.send(nachricht)
        antwort = s.recv(1024)
        print "[%s] %s" % (ip,antwort)
finally:
    s.close()
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Der Code funktioniert bei mir, und nein, es ist kein Problem wenn Server und Client auf dem gleichen Rechner laufen. Ich kann nur nochmal auf meine obigen zwei Fragen verweisen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

Also, Firewall iss inaktiv, daran liegts schonmal nicht.

und deine andere Frage versteh ich nicht so wirklich.
soll ich den Port verändern oder was meinst du?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Naja, jetzt wo ich gesehen habe dass der Code das tut was er soll, reduziert sich die Frage auf: Laeuft der Server noch, wenn du den Client startest? (Keine Fehlermeldung aufgetaucht oder anderswie beendet worden?)

Benutzt du Windows? Da kenne ich mich nicht mit aus, aber darf man als normaler User Server Sockets starten oder braucht man dafuer Admin-Rechte?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

hmm, wenn der Server nicht laufen würde, dann würd doch nicht "connection refused" kommen oder?
Eher was im Stil von "Connection timeout" wenn er keine Antwort kriegt oder?

und ja, ich arbeit unter Windows. Das mit den Admin-Rechten werd ich gleich mal nachprüfen.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Nein, connection refused ist meistens ein nicht vorhandenen Server. Die TCP-Pakete kommen am Ziel an, aber da ist nichts. Timeouts gibt's auf der Ebene nicht, aber eine ein "haengender" Client deutet darauf hin, dass entweder eine Firewall die Pakete dropt oder das Netz nicht in Ordnung ist, sodass die Pakete dass Ziel gar nicht erst erreichen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

hmm, da ich ja Client und Server auf dem selben Rechner laufen hab, dürfte das ja mit einem evtl. nicht funktionierenden Netzwerk nicht zusammenhängen oder?

und Firewall iss inaktiv. Schon die ganze Zeit :D
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

mit Python 2.6 und Windows 7 funktioniert das bei mir wunderbar.

Starte einmal den Server und schau ob du mit 'netstat -a' (in der Konsole) den folgenden Eintrag hast:

Code: Alles auswählen

 TCP    127.0.0.1:50000        L:0                    LISTENING
Und wenn du den Server abbrichst diese Meldung nicht mehr vorhanden ist.

Wenn der Server bei mir nicht gestartet ist kommt den folgenden Traceback:

Code: Alles auswählen

IP-Adresse: 127.0.0.1
Traceback (most recent call last):
  File "113321.py", line 5, in <module>
    s.connect((ip, 50000))
  File "<string>", line 1, in connect
socket.error: [Errno 10061] No connection could be made because the target machine actively refused it
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

hmm, mein Chef meinte das hänge irgendwie mit unsrem Firmennetzwerk zusammen und dass das sich da querstellt.

Gelöst haben wirs letztendlich durch Einrichten einer Loopbackverbindung.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Dir ist schon klar, dass der Code nicht sonderlich sinnvoll ist, da er arbitär den Datenstrom in Stücke teilt, diesen dann ausgibt, und den User nach einer Antwort fragt, und ich nicht nachvollziehen kann, wozu das sinnvoll ist. Kleines Beispiel:

A sendet "Du bist ein Kofferproduzent", B liest nur "Du bist ein Koffer" (Beledigigung hier in AT) und wird daraufhin nach einer Antwort darauf gefragt, in welcher er seine Verärgerung darüber, was A denn denke, dass er so eine Nachricht sendet, zum Ausdruck bringt. Was lernen wir daraus? Kaputte Netzwerkprogramme zerstören zwischenmenschliche Beziehungen.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Antworten