Odesílání dat na víc PC   zodpovězená otázka

VB.NET

Potřebuju v jedné aplikaci vytvořit spojení mezi serverovou aplikací a několika klienty. Jeden program (server) bude zpracovávat a odesílat data a další programy na jiných počítačích v síti budou data zobrazovat (těm stačí pouze čtení). Data budou pouze číslo od 1 do 16 se změnou za max. 500ms.

Zkoušel jsem upravit kreslící tabuli ( http://www.vbnet.cz/serial--5-kreslici_t... ), ale tam může být klient pouze jeden. Šlo by to upravit, aby se mohlo připojit více klientů?

Nebo existuje nějaká komponenta určená přímo pro jednoduchou síťovou komunikaci?

Díky

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

Pomocí současně používaných technologií máte víceméně dvě možnosti:

1) Po vzoru kreslící tabule komunikovat se všemi klienty najednou a všem v době změny data zaslat. Budete mít tedy vytvořených n komunikačních objektů, kdy n=počet klientů.

2) Použít namísto TCP protokolu protokol UDP, který lze využít i k broadcast přenosu. Ten má však řadu omezení a je potřeba jej prvně nastudovat. Na téma rozdílu mezi TCP a UDP je na internetu celá řada článků. Největší nevýhody pro vaše použití jsou problémy s broadcasty jinde, než v rámci místní sítě a "nespolehlivost" (není zaručeno doručení, ani pořadí došlých zpráv).

Nejdůležitější jsou otázky:

- kolik klientů bude připojeno současně?

- bude připojení realizováno pouze v místní síti, kde máte plnou kontrolu nad firewally?

- kolik dat se bude přenášet? (Tuto otázku jste už odpověděl)

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

Jednoduchá síťová komunikace navíc s možností změny komunikačního protokolu, zabezpečení, atd. pouze pomocí konfiguračního souboru = WCF.

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

Pro ty, co by to zajímalo, tak jsem použil UDP jak radil mistr Jecha.

K odesílání používám toto:

'pro komunikaci
Imports System.Text
Imports System.Net
Imports System.Net.Sockets

Public Class Form1
    Dim GLOIP As IPAddress
    Dim GLOINTPORT As Integer
    Dim bytCommand As Byte() = New Byte() {}
    Dim udpClient As New UdpClient

'...

Dim pRet As Integer

        Try
            GLOIP = IPAddress.Parse(IPAdresa)  'ip adresa
            GLOINTPORT = Port              'port
            udpClient.Connect(GLOIP, GLOINTPORT)
            bytCommand = Encoding.ASCII.GetBytes(Data)    'text
            pRet = udpClient.Send(bytCommand, bytCommand.Length)

        Catch ex As Exception
            Console.WriteLine(ex.Message)
            MsgBox(ex.Message)
        End Try

A k příjmutí toto: http://msdn.microsoft.com/en-us/library/...

Na víc "zařízení" to hodlám posílat tak, že to odešlu několikrát s jiným portem. Přijímací programy budou muset samozřejmě bejt nastavený na správnej port.

Pokud to jde jinak, můžete mi prosím poradit?

Díky

PS.: Klientů bude cca 5; provozováno pouze v místní síti na vlastních počítačích - firewall=OK

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

Ještě mám takovej dotaz (k přijímání dat):

Jak by šel změnit port za běhu programu? Vždy mi to vypíše chybu "Normálně je povoleno pouze jedno použití každé adresy (protokolu, síťové adresy, portu) soketu". V hotové aplikaci to způsobí pád.

A jde nějak zjistit, že už je port obsazený?

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

Jak by šel změnit port za běhu programu?

Úplně obyčejně založit nový socket na požadovaném portu a ten původní korektně uzavřít.

A jde nějak zjistit, že už je port obsazený?

Při vytváření socketu zachytit vyjímku příslušného typu. Určitě by šlo udělat výčet všech otevřených/napůl otevřených spojení včetně použitých portů, to by ovšem bylo zbytečně komplikované.

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