Würde gerne mein "super" Würfelspiel mit meiner Freundin im Netzwerk bzw. über Internet spielen !
http://www.ubuntuusers.de/paste/12253/
Was sollte ich mir so alles anschauen ?
gruss frank
Netzwerkspiel - wie umsetzen ?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Frank!kaytec hat geschrieben:Was sollte ich mir so alles anschauen ?
Du könntest z.B. mit XMLRPC http://www.python-forum.de/topic-5478.html arbeiten. Das erste Programm wird automatisch zum Server. Clients melden sich am Server an und übergeben die eigene Adresse dem Server. Dieser verbindet sich dann mit den Clients. Das funktioniert nicht schlecht. Ich habe dieses System bei meinem Bankomat-Programm im Einsatz. So können mehrere Computer auf ein Bankomat-Terminal zugreifen.
Code: Alles auswählen
CLIENT ----> SERVER
CLIENT <---- SERVER
Dann gibt es noch Pyro http://pyro.sourceforge.net/. Damit kann man auf einfache Weise ein komplettes Netzwerk von Python-Programmen aufbauen. Pyro hat auch einen Event-Server http://pyro.sourceforge.net/manual/6-eventserver.html mit an Board. Damit kann man Events an angeschlossene Clients übermitteln.
Natürlich gibt es noch mehr Möglichkeiten. Aber diese beiden scheinen mir recht praktisch zu sein. Die Erste, weil ich sie schon eine Weile im praktischen Einsatz habe und die andere, weil sie mit Events arbeitet und einem dadurch viel Programmierarbeit erspart wird.
Dann gibt es noch "asynchat" http://docs.python.org/lib/module-asynchat.html. Damit lassen sich auch recht einfach Programme bauen, die sich übers Netz miteinander unterhalten können.
mfg
Gerold
Zuletzt geändert von gerold am Freitag 29. Juni 2007, 23:04, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wenn es eine Client-Server-Architektur werden soll, kannst du unten von Sockets bis auf oben mit höheren Protokollen in einer breiten Masse wählen. Durch Verwendung von bswp. HTTP, XML-RPC oder SOAP hast du bereits fertige Implementierungen, die du direkt benutzen kannst; bei Sockets oder den asyn*-Modulen ist noch etwas mehr Handarbeit gefragt.
Peer-to-Peer ist auch denkbar, aber vielleicht für ein Spiel nicht so ideal *an damalige Zeiten mit IPX und "Waiting for player 6 to join..." denk*.
Peer-to-Peer ist auch denkbar, aber vielleicht für ein Spiel nicht so ideal *an damalige Zeiten mit IPX und "Waiting for player 6 to join..." denk*.
Danke an Gerold und YOGI !
Ich verstehe mal gar nix davon - macht ja nix - bekomme hier ja immer kompetente Hilfe. Ich habe ein Router SGB 900 von Motorola. Dieser regelt über DHCP mein internens Netzwerk (hoffe die Aussage stimmt mal so). Dieser müsste ja irgendwie die IP-Adresse von dem Rechner meiner Freundin an mich (evt. dann Server) übertragen ?! - oder geht das gar nicht ?
gruss und dank frank
Ich verstehe mal gar nix davon - macht ja nix - bekomme hier ja immer kompetente Hilfe. Ich habe ein Router SGB 900 von Motorola. Dieser regelt über DHCP mein internens Netzwerk (hoffe die Aussage stimmt mal so). Dieser müsste ja irgendwie die IP-Adresse von dem Rechner meiner Freundin an mich (evt. dann Server) übertragen ?! - oder geht das gar nicht ?
gruss und dank frank
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Wenn ihr im Lan seit kannst du sie per UDP Broadcast finden (*gerold angrins*). Falls du da ein Beispiel brauchst kann ich das liefern. Um übers Internet zu spielen verwendet man normalerweise Master Server welche vermitteln. Die haben dann fixe IP's oder zumindest Hostnamen. Grundsätzlich kann so ein Master Server auch ein einfaches Script auf einem Webserver sein (CGI, WSGI, ...).
PS: Ist die Sache mit dem Master Server nicht Patentiert? *g*
PS: Ist die Sache mit dem Master Server nicht Patentiert? *g*
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Frank!kaytec hat geschrieben:Ich habe ein Router SGB 900 von Motorola.
Wenn du kein Programm auf einem Server laufen lassen kannst, auf den du und deine Freundin Zugriff haben, dann musst du dein Netz und das deiner Freundin so einrichten, dass die Computer miteinander kommunizieren können.
Das ist mir jetzt zu viel, um das hier genauer zu erklären. Aber Grundsätzlich sollte es möglich sein, mit deinem Router Port-Forwarding einzurichten. Wie das bei deiner Freundin aussieht? Keine Ahnung.
Diese Anleitung ist zwar für eMule gedacht, aber sie zeigt schon mal auf, dass es funktionieren könnte.
http://portforward.com/english/routers/ ... /eMule.htm
Falls sich in beiden lokalen Netzen ein Router um die Internetverbindung kümmert, müssen beide Router so eingerichtet werden, dass, wenn eine Verbindung zur externen IP-Adresse des Routers zu einem bestimmten Port aufgebaut wird, diese Verbindung an die gewünschten Computer weitergeleitet wird.
Mein Tipp: Lass das von einem Freund oder einer Freundin einrichten, die sich damit auskennt. Oder informiere dich über TCP/IP, Port-Forwarding und DHCP. Das Verbinden von zwei Computern kann sehr einfach oder in vielen Fällen auch sehr Komplex sein. Das hängt von der Situation ab.
Vielleicht findest du irgendwo im Internet noch eine Anleitung dafür.
@veers: Wir haben hier im Board das "Codesnippets"-Forum. Da würde dein Beispiel ziemlich gut rein passen und vielen helfen, die nach so etwas suchen. -- Ich fände es echt super von dir, wenn du es dort rein stellen würdest.kaytec hat geschrieben:UDP Broadcast finden (*gerold angrins*)
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Danke Gerold !
Ok - ein wenig Ahnung habe ich schon, da ich das SGB Router selbst eingerichtet habe und auch mal die interne Firewall in Betrieb hatte. Da jeder in meinem Haus über mein Modem surft (geht auch nur in einem Altbau, da gibt es kein Stahlbeton) habe ich die aber wieder abgestellt , denn alle wollten irgendeinen Port freigeschaltet haben und ich war nur am rumbasteln. Meine Freundin surft auch über das Modem - wir haben also die gleiche externe IP-Adresse. Nur hinter dem Router ist diese über DHCP in Interne aufgeteilt. Ich müsste ein internes Netzwerk einrichten und einen Rechner zum Server machen ? Dieser Rechner übernimmt dann die Funktion des DHCP-Servers. Ein internes Netzwerk im internen Netzwerk ? - hört sich krank an !
Werde mal rumprobieren und mich wieder melden !
gruss frank
Ok - ein wenig Ahnung habe ich schon, da ich das SGB Router selbst eingerichtet habe und auch mal die interne Firewall in Betrieb hatte. Da jeder in meinem Haus über mein Modem surft (geht auch nur in einem Altbau, da gibt es kein Stahlbeton) habe ich die aber wieder abgestellt , denn alle wollten irgendeinen Port freigeschaltet haben und ich war nur am rumbasteln. Meine Freundin surft auch über das Modem - wir haben also die gleiche externe IP-Adresse. Nur hinter dem Router ist diese über DHCP in Interne aufgeteilt. Ich müsste ein internes Netzwerk einrichten und einen Rechner zum Server machen ? Dieser Rechner übernimmt dann die Funktion des DHCP-Servers. Ein internes Netzwerk im internen Netzwerk ? - hört sich krank an !
Werde mal rumprobieren und mich wieder melden !
gruss frank
Hy Gerold !
Habe mir das mit XMLRPC mal angeschaut und beide Scripte laufen lassen. Geht auch soweit, doch beim Serverscript stürzt leider die IDLE ab. Der localhost 50505 ist weiterhin vorhanden und so kommt der client auch an die Zufallszahlen. Für weitere Versuche starte ich immer einen neuen localhost(z.b: 50504). Ist natürlich nicht die beste Lösung. Könnte es an der mitgelieferten IDLE von Python liegen ?
gruss frank
Habe mir das mit XMLRPC mal angeschaut und beide Scripte laufen lassen. Geht auch soweit, doch beim Serverscript stürzt leider die IDLE ab. Der localhost 50505 ist weiterhin vorhanden und so kommt der client auch an die Zufallszahlen. Für weitere Versuche starte ich immer einen neuen localhost(z.b: 50504). Ist natürlich nicht die beste Lösung. Könnte es an der mitgelieferten IDLE von Python liegen ?
gruss frank
Über die Konsole habe ich es versucht - kann es auch ohne Probleme starten, doch ich bekomme diese Fehlermeldung, wenn ich den client starte?
Traceback (most recent call last):
File "/home/kaytec/test_client.py", line 12, in <module>
print server.get_random_int(1, 6)
File "xmlrpclib.py", line 1147, in __call__
return self.__send(self.__name, args)
File "xmlrpclib.py", line 1437, in __request
verbose=self.__verbose
File "xmlrpclib.py", line 1191, in request
headers
ProtocolError: <ProtocolError for localhost:50504/RPC2: -1 >
gruss frank
Traceback (most recent call last):
File "/home/kaytec/test_client.py", line 12, in <module>
print server.get_random_int(1, 6)
File "xmlrpclib.py", line 1147, in __call__
return self.__send(self.__name, args)
File "xmlrpclib.py", line 1437, in __request
verbose=self.__verbose
File "xmlrpclib.py", line 1191, in request
headers
ProtocolError: <ProtocolError for localhost:50504/RPC2: -1 >
gruss frank
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Frank!kaytec hat geschrieben:Geht auch soweit, doch beim Serverscript stürzt leider die IDLE ab.
Das Programm im Idle läuft zwar weiter, aber Idle bekommt keine Chance mehr Luft zu holen um sich mal wieder neu zu zeichnen. Das ist eine der Eigenarten von Idle. Nimm was anderes.
Code: Alles auswählen
Traceback (most recent call last):
File "/home/kaytec/test_client.py", line 12, in <module>
print server.get_random_int(1, 6)
File "xmlrpclib.py", line 1147, in __call__
return self.__send(self.__name, args)
File "xmlrpclib.py", line 1437, in __request
verbose=self.__verbose
File "xmlrpclib.py", line 1191, in request
headers
ProtocolError: <ProtocolError for localhost:50504/RPC2: -1 >
Starte lieber mal den Computer neu. Vielleicht hängt da noch etwas auf dem TCP-Port.
Pyro ist aber auch nicht ohne. Das solltest du auch noch ausprobieren.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
http://www.python-forum.de/viewtopic.php?p=72089#72089gerold hat geschrieben:@veers: Wir haben hier im Board das "Codesnippets"-Forum. Da würde dein Beispiel ziemlich gut rein passen und vielen helfen, die nach so etwas suchen. -- Ich fände es echt super von dir, wenn du es dort rein stellen würdest.
Danke Gerold !!
Ich verwende Ubuntu 7.04, Feisty Fawn. Ich habe den code nochmal von deinem Link kopiert und die Fehlermeldung ist die gleiche. In der Konsole bekomme ich auch ein Fehlermeldung, wenn ich den client starte.
Ich verwende Ubuntu 7.04, Feisty Fawn. Ich habe den code nochmal von deinem Link kopiert und die Fehlermeldung ist die gleiche. In der Konsole bekomme ich auch ein Fehlermeldung, wenn ich den client starte.
- Exception happened during processing of request from ('127.0.0.1', 48933)
Traceback (most recent call last):
File "SocketServer.py", line 222, in handle_request
self.process_request(request, client_address)
File "SocketServer.py", line 241, in process_request
self.finish_request(request, client_address)
File "SocketServer.py", line 254, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "SocketServer.py", line 522, in __init__
self.handle()
File "BaseHTTPServer.py", line 316, in handle
self.handle_one_request()
File "BaseHTTPServer.py", line 310, in handle_one_request
method()
File "SimpleXMLRPCServer.py", line 477, in do_POST
self.send_response(200)
File "BaseHTTPServer.py", line 360, in send_response
self.log_request(code)
File "SimpleXMLRPCServer.py", line 503, in log_request
BaseHTTPServer.BaseHTTPRequestHandler.log_request(self, code, size)
File "BaseHTTPServer.py", line 397, in log_request
self.requestline, str(code), str(size))
File "BaseHTTPServer.py", line 432, in log_message
self.log_date_time_string(),
File "BaseHTTPServer.py", line 452, in log_date_time_string
now = time.time()
AttributeError: 'module' object has no attribute 'time'
Kann es sein, dass Du da irgendwo eine `time.py` rumliegen hast, die anstelle des `time`-Moduls aus der Standardbibliothek geladen wird?
Danke Black Jack!
ja genau - das war das Problem. Die IDLE wird aber auch ohne time.py abgeschossen. Mit Dr. Python geht es jetzt. Dieses blöde time.py hat mir auch Dr. Python zum Problem gemacht. Genau dieses Problem gabe es hier schon im Forum - habe es auch gelesen aber keinen Bezug zu meinem gesehen .
Entschuldigung an alle, weil ich eure Zeit mit meiner Blödheit verschwendet habt.
gruss und dank frank
ja genau - das war das Problem. Die IDLE wird aber auch ohne time.py abgeschossen. Mit Dr. Python geht es jetzt. Dieses blöde time.py hat mir auch Dr. Python zum Problem gemacht. Genau dieses Problem gabe es hier schon im Forum - habe es auch gelesen aber keinen Bezug zu meinem gesehen .
Entschuldigung an alle, weil ich eure Zeit mit meiner Blödheit verschwendet habt.
gruss und dank frank