Seite 1 von 3

Kommunizieren

Verfasst: Freitag 12. März 2010, 21:14
von coolerj
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.

Verfasst: Freitag 12. März 2010, 22:44
von ms4py
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

Verfasst: Samstag 13. März 2010, 09:03
von coolerj
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.

Verfasst: Samstag 13. März 2010, 11:20
von EyDu
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

Verfasst: Samstag 13. März 2010, 12:34
von coolerj
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.

Verfasst: Samstag 13. März 2010, 13:18
von ms4py
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.

Verfasst: Samstag 13. März 2010, 20:08
von coolerj
Gehts denn trotzdem mit socket?

Verfasst: Samstag 13. März 2010, 21:00
von EyDu
Natürlich kann man das, aber es ist furchtbar umständlich und fehleranfällig.

Verfasst: Samstag 13. März 2010, 21:27
von coolerj
Das will ich ja.
Andere Frage wie kann ich ein bestimmten Fehler Code ignorieren und stattdessen was anderes machen.

Verfasst: Samstag 13. März 2010, 22:22
von EyDu
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.

Verfasst: Samstag 13. März 2010, 22:33
von coolerj
socket.error kapier ich nicht.

Verfasst: Samstag 13. März 2010, 23:07
von BlackJack
@coolerj: Was kapierst Du denn nicht? Das ist eine Ausnahme. Die kann man behandeln, wie jede andere Ausnahme auch.

Verfasst: Sonntag 14. März 2010, 12:24
von coolerj
Also wie ich das verwende.

Verfasst: Sonntag 14. März 2010, 12:32
von EyDu
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.

Verfasst: Sonntag 14. März 2010, 12:38
von coolerj
was in der Klammer muss kann mir nicht mal einer ein Beispiel schreiben

Verfasst: Sonntag 14. März 2010, 13:05
von jbs

Verfasst: Sonntag 14. März 2010, 13:23
von coolerj
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

Verfasst: Sonntag 14. März 2010, 13:40
von Hyperion
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?)

Verfasst: Sonntag 14. März 2010, 14:17
von ms4py
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.

Verfasst: Sonntag 14. März 2010, 14:32
von 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.