Я очень новичок в программировании сокетов и только что попытался написать простой скрипт сервер / клиент. Когда я пытался общаться с ними на моем собственном устройстве, это работало. Но когда я передал свой сценарий другу, чтобы мы могли общаться удаленно, он не работал (я не использовал 'localhost'
как hostname
).
Затем он перенаправил порт, используя HTTP-интерфейс своего маршрутизатора, и попытался соединить его с веб-сайтом, который проверяет, переадресован ли порт, это было положительно (мой сценарий не подключился, но это не наша тема).
Итак, я понял, что должен перенаправить порт, который будет использовать и мой сервер! Но используемый мной маршрутизатор не принадлежит мне, поэтому я не могу подключиться к интерфейсу HTTP. В этом случае моя программа должна перенаправить порт. Но я не знаю, как это сделать, и я не смог найти пример или пример моего уровня.
Я думаю, что это возможно, потому что приложения, которые мы используем, делают это каждый раз. Мне просто нужна помощь, чтобы понять это. Спасибо ...
Мой маленький сценарий:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('1. Server')
print('2. Client')
r = int(input("I'm going to be... "))
if r == 1:
host = socket.gethostname()
port = int(input('My port will be... (0 for auto) '))
s.bind((host, port))
sockName = s.getsockname()
print("\nYour Hostname: %s \nYour Port: %d" % (sockName[0], sockName[1]))
#s.listen(int(input('Listen for ... clients')))
input('Enter to listen...')
print('Listening...')
s.listen(1)
for i in range(1):
client, address = s.accept()
print("{}:{} connected!".format(address[0], address[1]))
message = input('Your message (/c to close): ')
if message == '/c':
client.send(message)
print('You sent: ', message.encode('UTF-8'))
else:
client.close()
s.close()
break;
elif r == 2:
host = input('The Hostname of Server is... ')
port = int(input('The Port of Server is... '))
print("\nServer's Hostname: %s \nServer's Port: %d" % (host, port))
input('Enter to connect...')
s.connect((host, port))
print('Connected!')
message = s.recv(4096)
print('Server: ', message.decode('UTF-8'))