Указание сети при отправке сообщения с сокетом - PullRequest
0 голосов
/ 02 февраля 2019

В настоящее время подключены к 2 отдельным сетям, одна Ethernet и одна беспроводная.Как определить, в какую сеть sendto() отправляется сообщение?

В настоящее время используется следующий базовый код, вызывающий проблемы:

BROADCAST_IP = "224.0.2.60"
BROADCAST_PORT = 4445
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
msg = "Testing"
sock.sendto(msg, (BROADCAST_IP, BROADCAST_PORT))

Когда я запускаю пример, кажется, что IP используется только через Ethernetсоединение, но не беспроводное.

Вкратце, код исправляется через сервер с использованием выделенного адреса многоадресной рассылки.

Полный код здесь

import socket
import time

servers = [
    ["Testing a server  :) [Test broadcast]", 25565]
    ]

BROADCAST_IP = "224.0.2.60"
BROADCAST_PORT = 4445

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

print "Broadcasting to specified port"

while 1:
    for server in servers:
        print("Broadcasting ", len(servers), " connections")
        msg = "[MOTD]%s[/MOTD][AD]%d[/AD]" % (server[0], server[1])
        sock.sendto(msg, (BROADCAST_IP, BROADCAST_PORT))
    time.sleep(1)
...