Multicast Adresse 239.255.255.250

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
oops6493
User
Beiträge: 3
Registriert: Montag 7. April 2008, 15:32

Multicast Adresse 239.255.255.250

Beitragvon oops6493 » Montag 7. April 2008, 16:23

Ich möchte ein Client-/Server-Skript schreiben, welches mit UPnP arbeitet. Dafür exisitiert die Multicast Adresse 239.255.255.250 und der Port 1900. Im Internet existieren einige Beispiel, wie mit Multicast umzugehen ist. Ich kriege es aber nicht hin, daß das Beispiel unten funktioniert. Wenn ich den Port oder die Adresse oder beides ändere, funktioniert es einwandfrei. Ändere ich zum Beispiel den Port auf 1901, läuft es.

Ich verwende Windows XP mit SP2. Mein erstes Problem war, daß ein Windows Dienst den Port bereits belegt hatte. Das habe ich gelöst und wenn ich "netstat -a" eingebe, wird kein Programm angezeigt, daß den Port 1900 benutzt. Meine Firewall habe ich zum Test schon deaktiviert, hat aber auch nichts gebracht.

Kann mir jemand helfen? Läuft das Beispiel bei irgend jemand? Ich habe im Internet gelesen, daß es Schwierigkeiten bei Windows XP vor dem SP 2 gab. Deswegen habe ich gerade eben nochmal den Windows Update durchgeführt, um auch sicher auf dem neusten Stand zu sein. Auf Linux habe ich leider nur am Wochenende Zugriff, das bedeutet, daß die eigentliche Entwicklungsarbeit unter Windows XP stattfinden muß.

Bin für jeden Hinweis dankbar.

Ich habe folgende Beispiele benutzt:

Server:

Code: Alles auswählen

from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from twisted.application.internet import MulticastServer

HOST="239.255.255.250"
PORT=1900

class MulticastServerUDP(DatagramProtocol):
    def startProtocol(self):
        print 'Started Listening'
        # Join a specific multicast group, which is the IP we will respond to
        self.transport.joinGroup(HOST)

    def datagramReceived(self, datagram, address):
        # The uniqueID check is to ensure we only service requests from
        # ourselves
        print "Server Received:" + repr(datagram)
        self.transport.write("data", address)

# Listen for multicast
reactor.listenMulticast(PORT, MulticastServerUDP())
reactor.run()

Client:

Code: Alles auswählen

from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from twisted.application.internet import MulticastServer

HOST="239.255.255.250"
PORT=1900

class MulticastClientUDP(DatagramProtocol):

    def datagramReceived(self, datagram, address):
            print "Received:" + repr(datagram)

# Send multicast
reactor.listenUDP(0, MulticastClientUDP()).write('UniqueID', (HOST, PORT))
reactor.run()
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Montag 7. April 2008, 18:47

Wie wäre es wenn du Coherence verwenden würdest?
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
oops6493
User
Beiträge: 3
Registriert: Montag 7. April 2008, 15:32

Ist ein Versuch wert

Beitragvon oops6493 » Dienstag 8. April 2008, 08:41

Ok, das werde ich mir anschauen. Auf den ersten Blick ist da schon fast alles umgesetzt, was ich brauche. Dafür werde ich aber ein paar Tage brauchen.

Hat sonst jemand eine Idee? Im Internet und in dem Forum habe ich jede Menge über Multicasts gefunden, aber leider nichts mit meiner speziellen Adresse 239.255.255.250 und dem Port 1900.

Danke für den Hinweis auf Coherence!
oops6493
User
Beiträge: 3
Registriert: Montag 7. April 2008, 15:32

Der Server läuft jetzt

Beitragvon oops6493 » Dienstag 8. April 2008, 09:47

Im Source Code von Coherence habe ich den Trick gefunden, wie ich den Server zum Laufen kriege.

Die Kommunikation zwischen Server und Client funktioniert zwar immer noch nicht, aber der Server läuft und horcht auf dem Port 1900. Mal schaun wie ich das Problem gelöst kriege.

Nochmal danke für den Tip!

Code: Alles auswählen

from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from twisted.application.internet import MulticastServer

HOST="239.255.255.250"
PORT=1900

class MulticastServerUDP(DatagramProtocol):
    def startProtocol(self):
        print 'Started Listening'
        # Join a specific multicast group, which is the IP we will respond to
        self.transport.joinGroup(HOST)

    def datagramReceived(self, datagram, address):
        # The uniqueID check is to ensure we only service requests from
        # ourselves
        print "Server Received:" + repr(datagram)
        self.transport.write("data", address)

# Alter und falscher Code
#reactor.listenMulticast(PORT, MulticastServerUDP())
# Mit dem Parameter listenMultiple=True funktioniert der Server
reactor.listenMulticast(PORT, MulticastServerUDP(), listenMultiple=True)
reactor.run()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder