Я пытаюсь создать простую пару программ сервер / клиент. В локальной сети они работают нормально, но когда я пытаюсь подключиться "извне", он говорит, что соединение отклонено. Я отключил брандмауэры на обеих машинах, но все еще не могу подключиться, и дважды проверил IP.
Что я делаю не так?
Благодарность
Джейк
Код:
import socket
host = ''
port = 9888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
conn, adrr = s.accept()
conn.send("Hello, world!")
s.close()
Client:
import socket
host = '68.x.x.x'
port = 9888
s = socket.socket(socket.AF_INET, socket_SOCK_STREAM)
s.connect((host,port))
print s.recv(200)
s.close()
2 ответа
У вас есть одна из двух возможных проблем.
- Ошибочная конфигурация сети
- Ошибка (ы) в коде
Способ отладки - это попытаться исключить одно. Если мы сможем избавиться от проблемы с кодом, тогда мы будем знать, что это проблема сети.
Получите Socket-сервер и клиент, которые, как вы знаете, работают, а затем попробуйте их как отдельные программы. внутри и снаружи брандмауэра. Перейдите на этот сайт и загрузите примеры. Измените порты как на клиенте, так и на сервере, скомпилируйте и запустите их. Сначала на одной машине в сети, затем на двух машинах в одной сети, а затем на сервере изнутри и клиенте вне сети.
Как обстоят дела с аргументом, который вы передаете вызову .bind
для сокета вашего сервера? Это единственная наиболее вероятная причина - например, если вы используете 192.168.x.y
для любых значений x
и y
, или 10.x.y.z
аналогичным образом, это адрес только локальной сети, не маршрутизируемый межсетевыми маршрутизаторами Интернет-соглашения (большинство маршрутизаторов можно запрограммировать для пересылки некоторых входящих пакетов на определенный адрес локальной сети, обычно в зависимости от портов, но это очень характерно для марок и моделей маршрутизаторов).
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.