Как делают Вас, UDP многоадресно передал в Python?

в терминале на удаленном сервере:

#download anaconda (change version if you want)
wget https://repo.continuum.io/archive/Anaconda3-2018.12-Linux-x86_64.sh

# run the installer
bash Anaconda3-5.1.0-Linux-x86-64.sh

# so changes in your path take place in you current session:
source ~/.bashrc

#To run a remote notebook, replace XXXX with your choice of four numbers like 9191
jupyter notebook --no-browser --port=XXXX
#copy the url that you get as a result

Затем на локальном компьютере откройте терминал и напишите:

#XXXX is the port you specified in the previous step, YYYY is a local port, for example 9999 to keep it simple
ssh -f [USER]@[SERVER] -L YYYY:localhost:XXXX -N

Затем скопируйте URL из предыдущего шага. вставьте его в браузер, так как вы использовали один и тот же порт, вам не нужно ничего менять в URL

81
задан 3 revs, 2 users 67%NoName 26 November 2018 в 12:21
поделиться

3 ответа

Многоадресный трафик не отличается, чем регулярный UDP за исключением IP-адреса. Смотрите на стандарт библиотека сокета . Можно быть в состоянии найти что-то, что основывается на сокете и легче использовать.

-4
ответ дан Dan Goldstein 3 July 2019 в 10:49
поделиться

Отправитель многоадресной рассылки, который осуществляет широковещательную рассылку в группу многоадресной рассылки:

#!/usr/bin/env python

import socket
import struct

def main():
  MCAST_GRP = '224.1.1.1'
  MCAST_PORT = 5007
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
  sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32)
  sock.sendto('Hello World!', (MCAST_GRP, MCAST_PORT))

if __name__ == '__main__':
  main()

Получатель многоадресной рассылки, который читает из группы многоадресной рассылки и выводит шестнадцатеричные данные на консоль:

#!/usr/bin/env python

import socket
import binascii

def main():
  MCAST_GRP = '224.1.1.1' 
  MCAST_PORT = 5007
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
  try:
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  except AttributeError:
    pass
  sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32) 
  sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)

  sock.bind((MCAST_GRP, MCAST_PORT))
  host = socket.gethostbyname(socket.gethostname())
  sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(host))
  sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, 
                   socket.inet_aton(MCAST_GRP) + socket.inet_aton(host))

  while 1:
    try:
      data, addr = sock.recvfrom(1024)
    except socket.error, e:
      print 'Expection'
      hexdata = binascii.hexlify(data)
      print 'Data = %s' % hexdata

if __name__ == '__main__':
  main()
17
ответ дан 24 November 2019 в 09:40
поделиться

Это работает для меня:

Получить

import socket
import struct

MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007
IS_ALL_GROUPS = True

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
    # on this port, receives ALL multicast groups
    sock.bind(('', MCAST_PORT))
else:
    # on this port, listen ONLY to MCAST_GRP
    sock.bind((MCAST_GRP, MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
  print sock.recv(10240)

Отправить

import socket

MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007
# regarding socket.IP_MULTICAST_TTL
# ---------------------------------
# for all packets sent, after two hops on the network the packet will not 
# be re-sent/broadcast (see https://www.tldp.org/HOWTO/Multicast-HOWTO-6.html)
MULTICAST_TTL = 2

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, MULTICAST_TTL)
sock.sendto("robot", (MCAST_GRP, MCAST_PORT))

Он основан на примерах из http://wiki.python.org/moin/UdpCommunication , которые не работали.

Моя система ... Linux 2.6.31-15-generic # 50-Ubuntu SMP Вт, 10 ноября, 14:54:29 UTC 2009 i686 GNU / Linux Python 2.6.4

89
ответ дан 24 November 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: