Seite 1 von 1

Python sockets über WAN verwenden?

Verfasst: Samstag 16. Juli 2011, 14:46
von xninjasftwx
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)


Re: Python sockets über WAN verwenden?

Verfasst: Samstag 16. Juli 2011, 18:37
von Dauerbaustelle
Geht's wenn du statt an "" an "0.0.0.0" bindest? Bin mir nicht sicher was bei "" verwendet wird.