Я написал 2 программы на Python 2.7. Один создает сокет хоста, а другой - сокет клиента. Затем они пытаются подключиться. У меня была хост-программа на моем ПК, и я поместил свою клиентскую программу на свой телефон, который был подключен к WIFI в той же сети, что и мой ПК. Я установил клиентскую программу (на моем телефоне, которая находится в моей локальной сети) для подключения к локальному IP-адресу моего ПК. Я проверил ошибки в своем коде и обнаружил, что он безупречен. Однако когда я попытался запустить его, я получил очень странное поведение взамен:

  1. Порт правильный. Имя хоста правильное. Я пытаюсь подключиться. Ничего не произошло. Соединение не установлено.
  2. Я перезагружаю свой компьютер.
  3. Я попробую это снова. Тот же результат.
  4. Я отключаю как локальный, так и публичный брандмауэр.
  5. Теперь я что-то получаю, но только на моем клиентском устройстве: [Errno 111] Соединение отказано.
  6. Я снова включаю свои брандмауэры.
  7. Тот же результат, что и в 1. (нет связи)
  8. Я запускаю программу хоста на своем ноутбуке. Я пытаюсь подключиться. Оно работает!
  9. Я перезагружаю роутер и снова запускаю хост-программу на ПК. Тот же результат, что и в 1.
  10. Теперь я также запускаю клиентскую программу на своем ПК, подключая ее к "localhost". Оно работает.
  11. Я делаю то же, что и в 10. Настройка клиентской программы для повторного подключения к локальному IP-адресу моего ПК. Ошибка:

    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        s.connect(cn)
      File "C:\Python27\lib\socket.py", line 224, in meth
        return getattr(self._sock,name)(*args)
    error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
    

В 6. Я пришел к выводу, что проблема связана с ПК и что мои программы работают нормально.

Некоторые интелы:

  • Windows 7 на ПК и ноутбуке.
  • Я использую Python 2.7.
  • Ноутбук и смартфон подключены к сети через WIFI, ПК через кабель.
  • Я пробовал разные порты, чтобы убедиться, что они не были проблемой.

вероятно, не так актуально, но вот код для хоста и клиента http://pastebin.com/raw/wswMi5SV

Что здесь происходит?

1 ответ1

0

В настоящее время вы привязываетесь к localhost который является только внутренним интерфейсом. Программы, привязанные к 127.0.0.1 , не доступны по сети, это сделано специально. Это можно увидеть, когда вы получаете "отказано в соединении", когда вы подключаетесь через брандмауэр. Когда вы отправляете TCP SYN на закрытый порт, ОС отправит обратно TCP RST обратно клиенту, чтобы указать, что порт закрыт.

Когда вы говорите, что привязка к 0.0.0.0 не работает, можете ли вы быть более конкретным? Как это терпит неудачу точно?

Одна вещь, которую вы можете попробовать это:

server.bind(("", port))

Если я правильно помню, это попытается привязать все доступные интерфейсы. Я не уверен, что вы пробовали ранее, но это должно решить вашу проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .