Я сделал простой TCP-сервер и клиент на Python.Все работает нормально, когда я использую локальный IP сервера, но не с публичным IP.Мой сервер имеет статический IP-адрес и привязан к этому IP-адресу и порту, и клиент пытается подключиться к общедоступному IP-адресу с тем же портом.Я настроил переадресацию портов на моем маршрутизаторе, чтобы якобы перенаправлять трафик на этот порт на локальный IP-адрес сервера.Маршрутизатор представляет собой Netgear X4S R7800.
Ни сервер, ни клиент не выходят из строя в любой момент.В конечном итоге клиент просто отключается и выдает исключение, а сервер, похоже, вообще не получает никакого соединения.
Server.py
from socket import *
SERVER_NAME = '192.168.1.140' #My server's (static) local IP
SERVER_PORT = 12100
def initializeServer():
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind((SERVER_NAME, SERVER_PORT))
serverSocket.listen(5)
print("Server initialized to port " + str(SERVER_PORT) +"...")
return serverSocket
def serverLoop(serverSocket):
while True:
connectionSocket, addr = serverSocket.accept() #Gets stuck here
print("Connected to", addr)
listenToClient(connectionSocket)
print("Terminating client connection ...")
connectionSocket.close()
if __name__ == '__main__':
serverSocket = initializeServer()
try:
serverLoop(serverSocket)
except KeyboardInterrupt:
shutdownServer(serverSocket)
print("\nServer shut down")
Client.py
import socket
SERVER_NAME = '193.91.XXX.XXX' #Public IP
SERVER_PORT = 12100
def connectToServer(serverName, serverPort):
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientSocket.connect((serverName, serverPort)) #Gets stuck here and eventually times out
return clientSocket
def main():
try:
serverSocket = connectToServer(SERVER_NAME, SERVER_PORT)
except Exception as e:
print("Cannot connect to the server\n", e)
else:
print("Connected to server")
try:
askForUserAction(serverSocket)
except KeyboardInterrupt:
serverSocket.close()
if __name__ == '__main__':
main()