Как обмениваться данными в разных сетях с помощью сокетов? - PullRequest
0 голосов
/ 06 мая 2019

Я знаю, что это уже задавали, но предыдущие вопросы не помогли. Я пытаюсь отправить некоторые данные с помощью сокетов. В частности, я использую свой ноутбук в качестве сервера и эмулятор Linux (Termux) на своем смартфоне в качестве клиента. Здесь ниже вы можете увидеть два кода Python. Для сервера:

import socket
HOST = ''
PORT = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
print('Connected by', addr)
while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.sendall(data)
    s.close()

А для клиента:

import socket
HOST = ''
PORT = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
s.close()

Когда я подключен к одному и тому же Wi-Fi и в HOST (в обоих кодах) я ставлю IP, который я вижу из ipconfig (192.168. --- .---), все работает. Это также работает, если в ХОСТЕ сервера я поставил 0.0.0.0.

Однако, когда я помещаю IP-адрес устройства (который я вижу на https://whatismyipaddress.com/), и вместо использования WiFi я использую телефонное соединение, которое я получаю: ConnectionRefusedError: [Errno 111] Connection Refused.

Может кто-нибудь объяснить мне, как я могу соединить клиент и сервер, когда сети разные? Я застрял с этим некоторое время.

Я также попытался открыть порт на брандмауэре, следуя этой процедуре , и поместил его в код вместо 5555, но все равно он не работал.

Заранее спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...