Netzwerk? localhost?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Sehr geehrtes Python forum,

Da ich in Netzewrkkommunikation nur sehr wenig erfahrung habe (ich bekomme alles nur über localhost hin) frage ich hier einfach mal nach.

Ich habe dieses Chatprogramm.
Es funktioniert zwar, aber mit diesem komischen Fehler:Bild
, wenn ich das von 2 PC in meinem Netzwerk laufen lasse.

Wie schaffe ich das jetzt, dass es im Internet und nicht nur im heimnetz läuft (brauch ich dafür eine Domain oder geht das mit IP).

Das Programm ist von "Das Python Praxisbuch", wo ich jedoch noch nichts darüber gefunden habe wie ich oben genanntes schaffe.
Ich hoffe auf Antworten,
MfG Robin

Code: Alles auswählen

#!/usr/bin/env python
# twisted_chatserver.py -- A Twisted chat server.

from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

class Chat(LineReceiver):
    def connectionMade(self):
        self.delimiter = '\n'
        self.userName = None
        self.sendLine(self.factory.prompt)
    
    def lineReceived(self, line):
        if self.userName is not None:
            # Received a line from a logged in user
            self.broadcastLine("<%s>: %s" % (self.userName, line))
        else:
            # User logging in with username line
            if line in self.factory.users:
                self.sendLine("Sorry, but %s is already logged in." % (line,))
                self.transport.loseConnection()
            else:
                self.userName = line
                self.factory.users[self.userName] = self
                self.broadcastLine("%s logged in." %self.userName)
    
    def connectionLost(self, reason):
        if self.userName is not None and self.userName in self.factory.users:
            del self.factory.users[self.userName]
            self.broadcastLine("%s logged out." %self.userName)
    
    def broadcastLine(self, line):
        for chatobject in self.factory.users.itervalues():
            chatobject.sendLine(line)

factory = Factory()
factory.protocol = Chat
factory.prompt   = "Nickname:"
factory.users    = {}  # Dictionary of (Nickname, Chat object) items.

reactor.listenTCP(7070, factory)
reactor.run()
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Ich gehe davon aus, dass du in deinem Router eine Port-Weiterleitung einrichten musst.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn "broadcastLine", was nach PEP8 besser "broadcast_line" heißen sollte, tatsächlich einen Broadcast macht, dann wird jeder vernünftiger Router die Pakete nicht weiterleiten. Selbst wenn deiner es doch tun sollte, werden es alle folgenden nicht mehr machen. Die Pakete würden ja sonst auch tatsächlich an jeden gehen. Du musst also, neben dem Portforwarding, mit den Beteiligten per "was auch immer" IPs kommunizieren, oder das über irgend einen Server geschehen lassen. Da würde auch ein einfaches PHP-Script genüngen.

Edit: Sehe gerade, dass zu allen Benutzern einzeln gesendet wird. Den ersten Teil meines Posts darfst du also vergessen.
Das Leben ist wie ein Tennisball.
Antworten