MulticastServiceDiscovery cu Python

Categorii: Programare

18-Jan-2017 15:19 - 526 vizionari

O idee de anul trecut afisata in domeniul public la github: https://github.com/icoman/py-MulticastServiceDiscovery

Este vorba despre un server UDP scris in python, care raspunde la pachete trimise prin multicast, nimic deosebit, nimic special, un serviciu simplu si eficient.

Prin multicast este trimis un pachet de date in reteaua de calculatoare, iar calculatoarele care ruleaza un program dedicat de server de multicast, raspund la mesaj.

Exemplu de raspuns primit intr-un sistem windows cu trei placi de retea (doua virtuale – virtualbox si una de wifi). Programul porneste trei servere pentru cele trei adrese de retea (192.168.99.1, 192.168.15.1 si 10.123.0.100) si trimite pachete multicast pe fiecare placa. Datorita unor greseli de program in python, in windows sau in programul meu, raspunsul este acelasi pe cele trei placi de retea si vine numai de la o singura adresa: 192.168.15.1. Pentru ca sunt cate trei raspunsuri la fiecare mesaj multicast, trag concluzia ca cele trei servere sunt pornite si raspund cu datele lor specifice (serviciu customizat pe IP-ul serverului), dar datele se trimit fara discriminare pe toate placile de retea. Mai clar: cele trei servere sunt inregistrate si raspund numai pe partea de retea unde este IP=192.168.15.1:

 

Intr-un sistem windows cu o singura placa de retea, raspunsul este cel asteptat. Sunt descoperite doua servere in retea, un windows cu IP=10.123.0.100 si un Linux cu IP=10.123.0.14:

Pe serverul Linux raspunsul este identic, dar in alta ordine:

Exemplu de server MulticastServiceDiscovery:


import mcsdisc

mcsd = mcsdisc.MulticastServiceDiscovery()
mcsd.registerService("key","value")
mcsd.start()
#alte instructiuni python sau o 
#bucla care nu face nimic si 
#lasa serverul sa se execute
import time
while True:
	time.sleep(1)

Exemplu de client pentru MulticastServiceDiscovery:


import mcsdisc
import json

mcsd = mcsdisc.MulticastServiceDiscovery()
L = mcsd.discover(20)
for i in L:
   data, server = i
   d = json.loads(data.replace("'", "\""))
   print "Services from",server
   for i in d.keys():
       print i,"=",d[i]

Sau ambele exemple combinate:


import mcsdisc
import json

mcsd = mcsdisc.MulticastServiceDiscovery()
mcsd.registerService("key","value")
mcsd.registerService("test1","123")
mcsd.registerService("test2","456")
mcsd.start()

while True:
    L = mcsd.discover(20)
    for i in L:
        data, server = i
        d = json.loads(data.replace("'", "\""))
        print "Services from",server
        for i in d.keys():
            print i,"=",d[i]
        print "---------------"
    raw_input("Press ENTER to retry discovery.")



Ultimele pagini: RSS

Alte adrese de Internet

Categorii

Istoric



Contorizari incepand cu 9 iunie 2014:
Flag Counter

Atentie: Continutul acestui server reprezinta ideile mele si acestea pot fi gresite.