Salut les web python,
comme le titre l'indique je désire avoir une socket (serveur inverse) émetrice qui envoie un message à plusieurs autres sockets (clientes inverses) réceptrices puissent recevoir simultanément.
Pour cela j'ai tenter plusieurs approches en faisant des essaies sur loopback (je ne sais si cela est possible) mais la configuration des socket pour cette taches n'est pas choses aisé (setsockopt) et donc
par
-broadcast
-mutlicast
sur lo.
Voici un bout de code pour configurer mes socket pour le multicast.
Après un court appel système:
sudo route add 127.0.0.0 dev lo
ou plutôt
sudo route add 224.0.0.0 dev lo
Voici le code de configuration de l'émetteur
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
from sys import argv, exit
if len(argv) != 3 :
print "usage %s ip port" % argv[0]
exit()
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind((argv[1],int(argv[2])))
sock.setsockopt(socket.SOL_SOCKET,socket.IP_ADD_MEMBERSHIP,argv[1])
sock.sendto("data",("127.0.0.255",4096)) |
Voici le code des récepteurs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
from sys import argv, exit
if len(argv) != 3 :
print "usage %s ip port" % argv[0]
exit()
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind((argv[1],int(argv[2])))
sock.setsockopt(socket.SOL_SOCKET,socket.IP_ADD_MEMBERSHIP,argv[1])
while 1 :
data=sock.recv(4096)
if data :
print data
exit() |
Vous rirai peut-être de mes piètres essaies la chose étant peut-être impossible sur lo ou de la configuration de mes sockets. mais les socket ne sont pas mon domaine de prédilection et je manque de savoir concernant le réseau en termes de broadcast | multicast.
Tout détail technique concernant le réseau, les sockets pythons, etc... sont la bienvenue.
Merci d'éclairé mon ignorance grâce a vos précieuse réponses.
Partager