Как транслировать по Wi-Fi adhoc с помощью библиотеки сокетов Python - PullRequest
1 голос
/ 11 июня 2019

Летний исследователь, использующий Raspbian и Python 3.5.

Я пытаюсь использовать Raspberry Pi 3 B + для передачи сообщения с использованием библиотеки сокетов другим Pis (той же модели) через их общую специальную сеть.,Все Pis могут пропинговать других через специальную сеть.Pis также может общаться, используя довольно стандартный клиент-серверный код и библиотеку python socket .Однако, когда я пытаюсь транслировать сообщение, Pis выдает сообщение «Сеть недоступна» (полная ошибка ниже).

Аспирант, с которым я работаю, сказал, что сценарий, который он мне предоставил, предполагает, что сервер будет работать в режиме инфраструктуры, и для корректной работы требуется настройка для режима ad-hoc.Это подтверждается тем, что я успешно запустил код на рабочем столе.Я пролил справочные страницы и стекопотока, и не могу найти ресурсы для того, как настроить широковещательную рассылку для специальных сетей.Какие-нибудь мысли?Вся помощь приветствуется.

Функция вещания:

def broadcast(self, frequency, port):

    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    server.settimeout(0.2)

    while True:
        server.sendto("GET OUT OF MY SWAMP", ('<broadcast>', port))
        print("message sent...")
        time.sleep(frequency)

Сообщение об ошибке:

Traceback (most recent call last):
  File "myServer.py", line 31, in <module>
    s.broadcast(float(frequency),int(port))
  File "myServer.py", line 22, in broadcast
    server.sendto("GET OUT OF MY SWAMP", ('<broadcast>', port))
socket.error: [Errno 101] Network is unreachable

1 Ответ

0 голосов
/ 11 июня 2019

Мой шлюз был 0.0.0.0. Вы можете просмотреть свой шлюз, введя sudo route -n . Запустив sudo route add default gw 192.168.0.112 (IP-адрес Pi), я теперь могу транслировать «GET OUT OF MY SWAMP» на любое устройство, подключенное к тому же порту и сети. Моя таблица маршрутизации после команды добавления выглядит так:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref   Use Iface
0.0.0.0         192.168.0.112   0.0.0.0         UG    0      0       0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0       0 wlan0

Все еще не знаете, как добавить шлюз на устройство навсегда; похоже, что шлюз сбрасывается после перезагрузки. Пожалуйста, не стесняйтесь предлагать дополнительные вопросы или разъяснения.

...