Kommunizieren

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Hallo,

Kann man mit Python mit ein anderes Python Programm auf einen anderen PC kommunizieren. Allerdings weiß ich nicht wonach ich suchen soll.
Am besten auch noch ein Tutorial.

Danke schonmal im Vorraus.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Hier ein paar Möglichkeiten:

- xmlrpc (in der stdlib)
Anleitung gibt es hier: http://openbook.galileocomputing.de/pyt ... 20_007.htm
(Normalerweise ist das openbook nichts, aber dieses Kapitel macht eigentlich einen ganz guten Eindruck)

- Pyro http://pyro.sourceforge.net/
Sehr einfach zu bedienen, kann ich nur empfehlen! Mein Favorit.

- dann gibt es noch mächtige Komponenten wie SOAP oder CORBA, aber für simple Anwendungen ist das dann mit Kanonen auf Spatzen...

- dann gibt es natürlich auch noch Sockets, aber ich würde auf eines der ersten beiden setzen
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Hallo,

Danke ich habe mich für das erste entschieden.
So jetzt habe ich mal ein Beispiel davon genommen kappiert und jetzt kommt ein Fehler

Code: Alles auswählen

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("", 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()
Fehler:
Traceback (most recent call last):
File "C:\Users\cheffe\server\server.py", line 4, in <module>
s.bind(("", 50000))
File "<string>", line 1, in bind
socket.error: [Errno 10048] Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden
Ich hab zwar den Fehler verstanden allerdings verwende ich es nicht doppelt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Startetst du das Programm zweimal auf dem selben PC, dann sagt die Fehlermeldung eigentlich alles. Und warum ist die Meldung auf deutsch, was für eine Python-Version verwendest du?

Es fehlt dir übrigens der Client (oder du hast ihn nur nicht gepostet). Wenn du auf beiden PCs dieses Programm startest, dann warten beide auf eine einkommende Verbindung.

Sebastian
Das Leben ist wie ein Tennisball.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Danke,

Aber ich hatte es selber noch hin bekommen ich hatte ein Programm anlaufen was denn Port benutzte.
Jetzt habe ich aber ein anderes Problem der Server soll nicht abstürzen wenn sich ein Partner ausloggt.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

coolerj hat geschrieben:Danke,

Aber ich hatte es selber noch hin bekommen ich hatte ein Programm anlaufen was denn Port benutzte.
Jetzt habe ich aber ein anderes Problem der Server soll nicht abstürzen wenn sich ein Partner ausloggt.
Hier noch mal die Empfehlung *keine* Sockets einzusetzen. Das war nicht mein erster Vorschlag. Mein erster Vorschlag war XML-RPC. Du musst bei dem Link eventuell noch das entsprechende Kapitel öffnen.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Gehts denn trotzdem mit socket?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Natürlich kann man das, aber es ist furchtbar umständlich und fehleranfällig.
Das Leben ist wie ein Tennisball.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Das will ich ja.
Andere Frage wie kann ich ein bestimmten Fehler Code ignorieren und stattdessen was anderes machen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

coolerj hat geschrieben:Das will ich ja.
Das ist zwar nicht nachvollziehbar, aber wenn du dir das antun möchtest.
coolerj hat geschrieben:Andere Frage wie kann ich ein bestimmten Fehler Code ignorieren und stattdessen was anderes machen.
Das steht ganz oben in der Dokumentation zum [mod]socket[/mod]-Modul.
Das Leben ist wie ein Tennisball.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

socket.error kapier ich nicht.
BlackJack

@coolerj: Was kapierst Du denn nicht? Das ist eine Ausnahme. Die kann man behandeln, wie jede andere Ausnahme auch.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Also wie ich das verwende.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

coolerj hat geschrieben:Also wie ich das verwende.
Na so wie es in der Dokumentation steht. Du musst schon genauer sagen, was du daran genau nicht verstehst.
Das Leben ist wie ein Tennisball.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

was in der Klammer muss kann mir nicht mal einer ein Beispiel schreiben
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

[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]
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Ich möchte doch nur den Fehler Errno 10054 ignorieren und wenn der auftaucht das der server weiter läuft und wenn der Fehler auftretet was besonderes ausführt
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hast Du uns eigentlisch schon mal erklärt, wieso Du mit Sockets arbeiten willst? (Du schriebst ja nur, dass Du Dir jede Menge Probleme einhandeln willst - aber wieso nur?)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Hyperion hat geschrieben:Hast Du uns eigentlisch schon mal erklärt, wieso Du mit Sockets arbeiten willst? (Du schriebst ja nur, dass Du Dir jede Menge Probleme einhandeln willst - aber wieso nur?)
Vor allem weil du noch ein ziemlicher Neuling zu sein scheinst, und es damit nicht nur dir, sondern momentan auch uns sehr schwer machst ;)

Für Programmierer mit wenig Python-Erfahrung empfiehlt es sich sehr, auf eine Lösung zu setzen, die das ganze Sockethandling abstrahiert.
BlackJack

@coolerj: `socket.error` hat als `args`-Attribut ein Tupel das als erstes Element die Fehlernummer und als zweites den Text enthält.

Allerdings sind beide Betriebssystemabhängig.
Antworten