Paitor
@Paitor
Выпускник. Изучаю Python и прочее

Почему socket работает только в локальной сети? Как это исправить?

Когда я запускаю сервер и клиент на одном компе, всё работает. Когда на телефоне и компе - всё работает. Но если отключить телефон от wifi, при этом на нем есть мобильный интернет, ничего не работает. Если запустить сервер и клиент на разных компах, тоже ничего не работает. помогите решить эту проблему.

Не думаю, что вам понадобится читать мой код, но я приложу минимальный пример
Сервер
import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as serv_sock:
    serv_sock.bind(('###.###.##.##', 53210))
    serv_sock.listen()
    client_sock, client_addr = serv_sock.accept()
    with client_sock:
        data = client_sock.recv(1024)
        print(data)


Клиент
import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_sock:
    client_sock.connect(('###.###.##.##', 53210))
    client_sock.sendall(input().encode())
  • Вопрос задан
  • 378 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Дело в том, что пока ваши устройства в одной подсети (им выдал адреса один DHCP сервер, это обычно ваш роутер), вы, указав локальный IP другого устройства в сокете, можете создать соединение.
Но если устройства в разных локальных сетях, между которыми не настоен никакой роутинг, то устройства не смогут видеть друг друга. Их адреса будут в разных адресных пространствах.
Это как звонить внутри отеля по внутреннему номеру телефона. Если один из абонентов окажется в другом отеле, то, даже зная его внутренний номер, вы из первого отеля не дозвонитесь ему напрямую по короткому номеру. Придётся пользоваться шлюзом. Вот шлюз - это NAT.
Тут дальше аналогия уже поплывёт, если ещё глубже пытаться её применять.
Прочитайте что такое NAT, что такое белый IP, динамический и статический IP, что такое port-forwarding, сетевая модель OSI, что такое маска подсети и как устроен IP-адрес, как происходит маршрутизация.
Это слишком много инфы, чтобы рассказывать вам об этом в ответе на один вопрос. Вам нужно изучать это самостоятельно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Попробуй повключать-повыключать различные интернет провайдеры и понаблюдай что показывает
ipconfig /all
я думаю вопросы отпадут сами собой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы