UdpClient - Multicast   zodpovězená otázka

VB.NET

Lze nějak zařídit, aby mohly na jednom PC dvě (či více) aplikací najednou přijímat data přes UDP v rámci LAN pomocí Multicastu z jednoho zdroje?

Mně to chodí pěkně, ale vždy jen pro jednu aplikaci. Pokud chci vytvořit instanci třídy UdpClient v druhé a další aplikaci, tak mi to hlásí chybu "Normálně je povoleno pouze jedno použití každé adresy (protokolu, síťové adresy, portu) socketu". Pokud použiju jiný port, tak sice klienta vytvořím, ale data nepřijmu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na jednom konkrétním portu může naslouchat vždy jen jedna aplikace, to je základ síťové komunikace...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Takže jediné řešení,které mě napadá i když se mi moc nelíbí, protože dubluje datové toky, je založit si na vysílací straně dva klienty, kteří budou vysílat to samé, každý na jiném portu skupiny a na přijímací straně si napojit každého klienta na samostatný port.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud potřebujete funkčnost multicastu ve více síťových aplikacích běžících na jednom počítači (ale i v jedné síti nebo dokonce v Internetu), vyzkoušejte technologii Peer Name Resolution Protocol, která je v System.Net.PeerToPeer. Principiálně zaregistrujete klienty do jakéhosi mračna, do kterého lze potom hromadně rozesílat data. Tato technologie funguje pouze na systémech Windows XP Service Pack 3 nebo Windows Vista.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ideální řešení bude přijímat stream jednou aplikací. Ta už v rámci meziprocesové komunikace bude distribuovat signál i do té druhé.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji Vám oběma za odpovědi. Bohužel na některých PC, kde to potřebuji nasadit jsou a z určitých důvodů ještě dlouho budou W2000. Co se týče meziprocesové komunikace, tak to je pro mě úplně nový (a určitě ne jednoduchý) chleba. Myslel jste použít něco ze jmenného prostoru System.Runtime.Remoting?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

.NET Remoting, WCF, pojmenované nebo anonymní kanály (System.IO.Pipes), Windows zprávy - vše se dá použít pro meziprocesovou komunikaci. Pokud by byl požadavek pouze na meziprocesovou komunikaci v rámci jednoho počítače, volil bych kanály, v ostatních případech WCF.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dík. Má to zase malý háček. Tyto vymoženosti jsou až v .NET Frameworku 3.5, který zase (alespoň dle údajů Microsoftu) nechodí na W2000, které nemohu (i když bych velmi rád) na některých PC upgradovat na XP. Čili takový bludný kruh. Nevadí. V nejhorším si to pošlu dvakrát, každé aplikaci na jiný port. Těch třikrát sto bajtů za vteřinu síť unese :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Meziprocesovou komunikaci (ve zkratce IPC) nabízí například třída IpcChannel. Ta je i ve starším .NET Frameworku. Základní info o ní je zde:

http://msdn.microsoft.com/en-us/library/...

Hezký příspěvek o používání naleznete zde (EN):

http://weblogs.asp.net/israelio/archive/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc. V prvním náhledu tam postrádám metody pro asynchronní čtení zpráv (obdoba BeginReceive a EndReceive), ale prostuduju to pořádně a třeba na něco přijdu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asynchronní volání si v tomto případě musíte zařídit sám. Přeci jenom se jedná o klasický remoting. Každopádně věřím, že pro vás je to nejvhodnější technika.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback