#sockets #tcp #network-programming
#сокеты #tcp #сетевое программирование
Вопрос:
Я новичок в программировании сокетов. Мои сокеты работают с localhost или локальным ip. Но почему я не могу создать сервер сокетов с моим общедоступным ip? Когда я пытаюсь сделать это на python, он жалуется «не удается назначить запрошенный адрес».
import socket
s=socket.socket()
host="address"
port=5000
s.bind((host, port))
s.listen(5)
while True:
c, addr=s.accept()
result=c.recv(1024)
print(result.decode('utf-8'))
c.send("""
test
""".encode('utf-8'))
c.close()
Мой IP-адрес, который я получил с этого сайта:http://whatismyip.host /
Комментарии:
1. Не могли бы вы показать, как вы определили свой общедоступный IP-адрес и как выглядит код, который пытается прослушивать этот адрес? Проблема может заключаться в том, что ваш компьютер находится за маршрутизатором и не может прослушивать адрес, принадлежащий маршрутизатору.
2. Я обновил свой вопрос. Я прочитал из другого сообщения, что мой общедоступный IP-адрес принадлежит моему маршрутизатору, поэтому я не могу получить к нему доступ. Но почему тогда серверные машины могут получать доступ к своему общедоступному IP-адресу для создания веб-серверов?
Ответ №1:
Сервис, подобный http://whatismyip.host / покажет вам общедоступный адрес вашего маршрутизатора, то есть компьютера, подключенного к Интернету. Если вы посмотрите IP-адрес своего настольного компьютера, он, вероятно, покажет что-то вроде 192.168.0.10
, где 192.168.0.1
это адрес вашего маршрутизатора, который вы вводите на своем рабочем столе в качестве «шлюза».
Ваш маршрутизатор напоминает брандмауэр, отделяющий вашу домашнюю сеть от общедоступного Интернета.
Для получения соединений на вашем настольном компьютере вам потребуется настроить перенаправление портов на вашем маршрутизаторе. Ваш процесс python по-прежнему будет прослушиваться 192.168.0.10
(IP вашего локального компьютера). Или вы могли бы установить для него значение 0.0.0.0
, которое является сокращением для «всех доступных интерфейсов».
Имейте в виду, что ваш общедоступный IP-адрес, вероятно, нестабилен.
Комментарии:
1. Тогда у каждой машины в локальной сети один и тот же общедоступный IP-адрес? Почему я могу подключиться к веб-серверу, используя его уникальный общедоступный ip?
2. В принципе, да. Поскольку ваш интернет-провайдер предоставляет вам только один общедоступный IP-адрес, все компьютеры в вашей локальной сети будут совместно использовать этот IP-адрес. Если вы подключаетесь к другому веб-серверу, ваш маршрутизатор установит свой общедоступный IP-адрес в качестве исходного IP-адреса пакетов, чтобы ответы могли найти обратный путь.