Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF – vaše škola fotografie

 

Kdo lektoruje pražský letní workshop v ZOO a Botanické zahradě?

V dnešní soutěži hrajeme o:

Dárkový certifikát v hodnotě 1000 Kč



Nespojovaná síťová komunikace

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Nespojovaná síťová komunikace

Autor: piityy

19:08:15 12.11.2010

Pokračuji v monologu :).
Nakonec jsem to vyřešil tak, že je na formuláři statická proměnná (aby byla vidět ve vlákně), která označuje, jesli se má čekat na další data či nikoli. Při ukončování aplikace pak stačí touto proměnnou informovat vlákno o konci a poslat ještě 1 paket na broadcast (vlákno je blokované dokud nějaký paket nedorazí, teprve pak je možno provést test a vlákno korektně ukončit).
Data předávám přes statickou třídu, která si zabezpečuje konzistenci dat.
Je velice pravděpodobné, že to není programátorsky moc dobré, ale funkční.

Citovat příspěvek

 

Re: Nespojovaná síťová komunikace

Autor: piityy

21:19:39 19.09.2010

Budu ještě chvíli pokračovat v monologu :)

Spustil jsem tedy Receive v jiném vlákně. Funguje to dobře, data to přijímá (zatím se o tom dozvídám messageboxem) a GUI to neblokuje. Jak z toho vlákna dostat data jsem zatím neřešil.
Je tu ovšem jiná nepříjemnost - při ukončování aplikace to formulář zabalí, aplikace ovšem zůstane v paměti. Receive nějak blokuje zastavení vlákna. "Abort" nevede k požadovanému cíli. Když po abort vložím "Join" a čekám na ukončení vlákna, tak se nekoná (i formulář zůstane načten, ovšem zablokovaný).

PS: stále testuji na w32, co na mě čeká na PDA se stále těším :)

Citovat příspěvek

 

Re: Nespojovaná síťová komunikace

Autor: piityy

16:42:19 19.09.2010

Ohledně toho portu - to jsem jen lama, odesílá to správně na požadovaný port, jen zdrojový je různý. Ovšem s vysíláním problém není, to bych mohl i na CF bez problému realizovat UdpClientem, problém je příjem.

Teď mě napadá, jesli by nepomohlo spustit blokující Receive udp klienta a jiném vlákně. To sem si moc nepomoh (vícevláknové prog.), aspoň mám co zkoumat :)

Citovat příspěvek

 

Nespojovaná síťová komunikace

Autor: piityy

23:47:24 18.09.2010

Zdarec,
řeším menší problém, jako obyčejně na w32 bez problému ale na CF ve WM5 jsem mimo.
Potřebuji komunikovat v LAN (konkrétně wifi) nespojovaně (alespoň zpočátku), protože neznám adresu protějšku.
Rozhodl jsem se tedy využít UDP, kte můžu posílat i přijímat přes broadcast. Problém je v tom, že v CF není u třídy "UdpClient" vlastnost "Available" ani asynchronní metody. Jelikož udp dotaz má sloužit ke zjištění cíle, nemusí logicky žádná odpověď (krom toho, že se mi vrátí můj dotaz) přijít a v tu chvíli aplikace zamrzne.

Zkusil jsem to tedy přepsat místo "UdpClient" na "Socket". Zatím testuji na w32

// init
sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.EnableBroadcast = true;
sock.Blocking = true; // nema vliv na nefunkcnost
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);

// odeslani
sock.SendTo(buff, SocketFlags.DontRoute, new IPEndPoint(IPAddress.Broadcast, lisPort));
// odesila, ošem při použití UdpClient pro příjem to ukazuje nesprávný port
// data odeslaná z UdpClient jsou přijata se správným portem

// prijem
sock.ReceiveFrom(receivedData, SocketFlags.None, ref endpoint);
// končí výjimkou "Před provedením této operace je třeba zavolat metodu Bind."
// volání "Bind" končí buď už u něho výjimkou (o nepoužitelné adrese) nebo později v ReceiveFrom s obdobnou hláškou.

Věděla by nějaká dobrá duše co s tím? Nebo jiný nápad, jak využít lokální LAN jen jako všesměrové přenosové médium bez adresace. Prostě jen poslat data na sí
ť a ať si je chytne, kdo je zrovna vidí. S úplnou třídou "UdpClient" mi to chodí, ale s osekanou na CF už nevím jak na to.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: