[Python] Port-Kommunikation über das internet


killerkirsche

Erfahrenes Mitglied
Hallo Zusammen!

Ich habe folgende Idee:
Ich möchte in Python eine Anwendung schreiben, die einen gewissen Port (bspw. 5005) offenhält und Aktionen auf dem PC durchführt, sobald über das Internet die passenden Nachrichten an den Port gesendet werden.
Ich habe angefangen, indem ich einen server Programmiert habe, der die Empfangenen Nachrichten anzeigt und einen Client, der halt Nachrichten sendet.
In den versuchen funktioniert das aber nur mit der IP "127.0.0.1". Wenn ich allerdings an die IP sende, die mir http://www.wieistmeineip.de/ anzeigt sende, dann kann ich irgendwie keine Verbindung zum server aufbauen.

Hier meine Listing:
TCP_server.py:
Python:
import socket
import sys



TCP_PORT = 0
BUFFER_SIZE = 10  # Normally 1024, but we want fast response
                                   
TCP_PORT = int(raw_input("Port:"))
TCP_IP = ''

sockServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockServer.bind((TCP_IP, TCP_PORT))
sockServer.listen(1)

(sockClient, addr) = sockServer.accept()
print 'TCP_Server is connect to a client.'
print '\tAddress:\n',addr

try:
  i=0
  while 1:
    data = sockClient.recv(BUFFER_SIZE)
    if not data: break            
    sys.stdout.write(data)
    i=i+1
  sockClient.close()
except KeyboardInterrupt:
  sys.stdout.write("Shutting down...")
  sockClient.close()
  
sys.stdout.write("\n\n")
sys.stdout.write("Finished.")
TCP_client.py
Python:
import socket
import sys
import errno
import os


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

# Here we get some information from the user. These are:
#   1. The IP of the requested server
#   2. The port to send the messages
TCP_IP = raw_input("IP:")
TCP_PORT = int(raw_input("Port:"))

# Then we open/connect the socket                              
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if(s.connect_ex((TCP_IP, TCP_PORT))!=0):
  sys.stdout.write("Could not connect to Server at:\n")
  sys.stdout.write("  IP    :"+str(TCP_IP)+"\n")            
  sys.stdout.write("  PORT  :"+str(TCP_PORT)+"\n")
  sys.exit()

# Then we start chatting
strMessage= ""
while(strMessage!="/quit\n"):
  strMessage = raw_input("[send:]")
  strMessage = strMessage + "\n"
  s.send(strMessage)

# It seems that the user has quit chat. so we close the socket      
s.close()


raw_input("Ende.")
 

Bullja

Erfahrenes Mitglied
Hi killerkirsche,
Du hast sicher einen Router, welcher die Internetverbindung aufbaut und die Kommunikation von extern nicht erlaubt. Wenn Du das aber erlauben willst, muss Portforwarding auf dem Router aktiviert werden. Einfach mal durch das Menü des Routers klicken und danach suchen.

Grüße,
Bullja
 

killerkirsche

Erfahrenes Mitglied
Danke.
Das versuche ich doch direkt mal.
Gibt es eine Möglichkeit, dass anders zu lösen?

Also wenn sich die Software auf einem anderem PC in einem Netzwerk befindet (Spiele mit dem Gedanken da einen Chat raus zu basteln), dann müsste ja jeder seine Router-Einstellungen ändern...
 

sheel

I love Asm
Andere Lösung gibts keine.
NUR: Das ganze ist ja nur bei Servern der Fall.
Portforwarding brauchst du nur beim listen auf Verbindungsanfragen; reines connecten geht natürlich auch so
 

Bullja

Erfahrenes Mitglied
Du könntest einen Server erstellen, welcher die Verbindungen von den Chat-Teilnehmern annimmt und dann eben an jeden die Nachrichten liefert.
 

killerkirsche

Erfahrenes Mitglied
Hm... da ich kein Interesse an der Idee habe, hier nen server aufzubauen, der ständig online ist, werd ich die Idee wohl sein lassen...
Aber vielen Dank für deine Hilfe =)
 

Neue Beiträge