Python sockets über WAN verwenden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
xninjasftwx
User
Beiträge: 2
Registriert: Sonntag 10. Juli 2011, 22:02

Ich habe folgendes Problem: Ich versuche einen String zu versenden mit Hilfe des socket-Moduls.

Alles funktioniert wenn ich es im LAN ausprobiere, doch wenn ich versuche eine Nachricht zum PC meines Freundes zu senden kommt sie nicht an :(
Die Ports am Router sind geforwarded, und zwar bei mir und bei meinem Freund, doch irgendwie scheint es nicht zu funktionieren
(Anmerkung: Ich verwende die Hamachi-Adresse, und ja mein Programmierstil ist Mist :D )

Code: Alles auswählen


import socket
import threading
import time
import sys

def ShowProcedure():
    time.sleep(3)
    sys.exit(True)

class Client():
    def __init__(self):
        self.PORT = 0
        self.IP = 0
        self.MainClientSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        
    def Connect(self):
        try:
            self.MainClientSocket.connect((self.IP, int(self.PORT)))
        except:
            print "failed to connect to ip"
            ShowProcedure()
            
    def Send(self, DATA):
        try:
            self.MainClientSocket.sendto(DATA, (self.IP, int(self.PORT)))
        except:
            "failed to send message!"

class Server(threading.Thread):
    def __init__(self):
        self._BUFFERSIZE_ = 0
        self.PORT = 0
        self.IP = None
        self.ServedData = None
        self.PartnerAddr = None
        self._RunLoop_ = True
        threading.Thread.__init__(self)
        
        self.MainServerSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        
    def run(self):
        try:
            self.MainServerSocket.bind((self.IP, int(self.PORT)))
            print "Server connected!\n"
        except:
            print "invalid port!"
            time.sleep(3)
            sys.exit(True)
        while self._RunLoop_ == True:
            if self._BUFFERSIZE_ < 1:
                self._BUFFERSIZE_ = 256
            self.ServedData, self.PartnerAddr = self.MainServerSocket.recvfrom(self._BUFFERSIZE_)
            if self.ServedData:
                print "%s >> %s\n" % (self.PartnerAddr,self.ServedData)
            if not self.ServedData:
                print "Chatpartner left\n"
                ShowProcedure()
        
PortInput = str(raw_input("port fuer Server eingeben :"));
print PortInput
try:
    int(PortInput)
except:
    print "No letters!\n"
    ShowProcedure()
ChatRecvServer = Server()
ChatRecvServer.PORT = PortInput
ChatRecvServer.IP = ""
ChatRecvServer.start()

IPInput = str(raw_input(u"geben sie die Hamachi- Addresse des Empfaengers ein :"))
PortInput = str(raw_input("geben sie den Klientenport ein :"))
ChatClientSender = Client()
ChatClientSender.IP = IPInput
ChatClientSender.PORT = PortInput
ChatClientSender.Connect()
while 1:
    ClientMessage = raw_input(">>")
    ChatClientSender.Send(ClientMessage)

Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Geht's wenn du statt an "" an "0.0.0.0" bindest? Bin mir nicht sicher was bei "" verwendet wird.
Antworten