ATNEL tech-forum
https://forum.atnel.pl/

Visual C# -- Komunikacja UDP - Wysylanie - Czesc I
https://forum.atnel.pl/topic8960.html
Strona 1 z 1

Autor:  RafPe [ 25 paź 2014, o 23:50 ]
Tytuł:  Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Witam wszystkich!

Ostatnimi czasy na topie jest problem wlasnej komunikacji UDP. Jest to temat dosc popularny jako , ze Mirek porusza go w BB. Wiec kazdy kto tam dochodzi staje przed problemem kiedy chcialby zrobic cos swojego.

Jak osobiscie zauwazylem wiekszosc z Was wybiera droge przez programowanie C#. No i tutaj dla niektorych moga sie pojawic problemy jesli jeszcze wczesniej nie bawili sie tym jezykiem programowania.

Dlatego postanowilem napisac poradnik dotyczacy tworzenia wlasnej aplikacji w C# wlasnie do komunikacji UDP. Bedzie on oczywiscie przeprowadzac Was krok po kroku jak osiagnac wybrany cel.

Na chwile obecna aby kazdy mogl pracowac w swoim tempie i aby mozna bylo pomoc ludziom w zrozumieniu dzialania tych mechanizmow poradnik bedzie podzielony na kilka czesci.

Kolejne czesci bede uzupelnial az opracujemy w pelni wielowatkowy program do wysylania/odbierania.

Technologia jaka wykorzystamy to Visual Studio. Ja osobiscie bede uzywac 2013 ale mozna to osiagnac rowniez korzystajac ze wczesniejszych wersji. Jedyne co moze byc problematyczne to , ze zrzuty ekranu prezentowane przeze mnie beda w j.ang wiec jak tylko bede mogl to staral sie Was naprowadzic na ta opcje w j.pol

Kolejna informacja to forma projektu. Bedziemy uzywac Windows Forms. W dzisiejszych czasach to juz jak "dziadek" ale da rade , zebysmy mogli osiagnac to czego potrzebujemy :)

Przygotowanie srodowiska do pracy

Wiec uruchamiamy nasze Visual Studio i tworzymy nasz nowy projekt. Nadajemy mu jakas "sensowna" nazwe :) i wybieramy odpowiednio
  • Aby byl to jezyk ptogramowania C#
  • Aby wersja .Net to 4.0 (ma to znaczenie jesli uzywamy cos innego niz VS2013)
  • Aby nasz projekt byl typu Windows Forms Application

Obrazek

Jako , ze chcialbym utrzymac ten poradnik w tonie funkcjonalnym pozostawiam Wam drodzy czytelnicy uklad graficzny aplikacji :) My zaczniemy od bardzo prostej rzeczy , czyli .....

Dodajemy pierwsza kontrolke

W naszej aplikacji bedziemy dzialac w odpowiedzi na jakies zdarzenie. Te najbardziej powszechne to "nacisniecie guzika". Wiec .... z Toolbox widocznego po lewej stronie wybieramy "button" i przeciagamy go na nasza aplikacje.

Obrazek

Obrazek


W ten oto sposob mamy zakonczony wstepny etap. Nastepnie ,zeby nasza aplikacja wiedziala , ze cos ma sie stac klikamy dwa razy w nasz guzik. Visual Studio automatycznie utworzy dla nas metode obslugujaca zdarzenie dla wcisnietego guzika

Jesli nie zmienialiscie Cie nazwy guzika i pozostaliscie przy domyslnej powinniscie teraz miec cos na wzor tego co w ponizszym zrzucie ekranu ... czyli poprawnie3 utworzona metode dla obslugi naszego zdarzenia.

Obrazek

Aby dalej moc pracowac i tworzyc kod musimy dodac nastepujaca referencje u gory naszego kodu , bo inaczej ani rusz :D

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zanim przejdziemy dalej chcialem Wam pokazac , w ktorym miejscu bede tworzyc zmienne GLOBALNE. Dlatego zawsze kiedy pozniej bede wspominac , ze tworze zmienna takiego zasiegu - zwroccie prosze uwage gdzie ona sie znajduje.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W tym momencie mozemy stworzyc juz zmienne , ktora wykorzystamy do wysylania naszych ramek UDP.

Zaczynamy od IPEndpoint.Potrzebna nam bedzie ona w dalszej czesci. Dzieki tej zmiennej definiujemy jaki adres IP wykorzystamy oraz na jakim porcie. Jako , ze bedziemy wysylac dane podajemy tutaj dane naszego komputera / serwera. Port 1234 jest przykladowy i moze/powienenen byc zmieniony na cokolwiek co Wam odpowiada.

Ponizsze zmienne jeszcze NIE DEFINIUJA naszego urzadzenia DOCELOWEGO ... to pozniej

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Prosze poswiec chwilke zeby zobaczyc co sie dzieje w tym kodzie. Tworzymy nasza zmienna a nastepnie jako parametry do jej stworzenia musimy podac adres IP naszego komputera/serwera a pozniej port , ktory wykorzystamy do komunikacji UDP. Bardzo wazne na tym etapie jest by adres IP byl poprawny. W przeciwnym wypadku aplikacja niestety sie wysypie (kontrola bledow to temat rzeka na inny poradnik wiec zostawiam to w Twojej mocy)

Teraz jestesmy gotowi aby stworzyc zmienna , ktora posluzy nam do komunikacji UDP. Bedzie to takze zmienna o zasiegu GLOBALNYM i bedzie typu UDPClient

Dzieki powyzszej modyfikacji nasz kod zmienia sie troszeczke ... i wyglada nastepujaco.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po tych wszystkich zabiegach przejdziemy do naszej metody obslugujacej nacisniecie naszego guzika. Przed chwila zainicjalizowalismy sobie zmienna o nazwie klient i to wlasnie ja tam wykorzystamy do wysylania danych.

Zanim jednak przejdziemy do sedna ... Pamietaj , ze bedziemy wysylac bajty :) nikt nie oczekuje , ze bedziesz w stanie wpisac bajty do wyslania. Mirek slusznie zauwaza ,ze chcemy pracowac z ASCII - dlatego wiec chcialbym na wstepie zaznaczyc , ze aby to obslugiwac w C# bedziemy korzystac z dostepnych metod opisanych ponizej....
  • Aby zamienic wartosc ze string na byte[] wykorzystamy
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
  • Aby zamienic wartosc z byte[] na string wykorzystamy
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
  • Aby sprawdzic ile byte'ow ma nasz string wykorzystamy (jest to jeden z wielu sposobow)
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Aby powyzsze zadzialalo prawidlowo musimy dodac kolejna referencje na poczatku naszego programu. Tym razem jest ona potrzebna do dzialania powyzszych funkcji.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Moze juz zastanawiasz sie gdzie jest cos definiujacego miejsce do ktorego wysylamy nasze ramki ? No i masz racje. Nie zdefiniowalismy takiego jeszcze.
Tak jak i wczesniej bedzie to zmienna o zasiegu GLOBALNYM i nazwie ep_destination

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W powyzszym musisz zdefiniowac adres IP pod ktory bedziesz wysylac dane oraz port na ktorym docelowa aplikacja nasluchuje.



Teraz mamy wszystkie nasze skladniki gotowe.... wracamy wiec do miejsca wysylania naszej ramki. We wczesniej wspomnianej metodzie przygotujemy sobie nowa zmienna typu string oraz wyslemy ja wykorzystujac wczesniejsza zmienna o nazwie klient

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i na chwile obecna to wszystko - po uruchomieniu naszej aplikacji oraz klikniecia guzika nasza aplikacja wysle pakiet UDP pod wskazany adres oraz port.


Aby potwierdzic to sprawdzamy sobie konsolowa aplikacja ktora nasluchuje na okreslonym porcie.... no i dziala :)

Obrazek

Jednak ktos moglby powiedziec ... ale czy naprawde dziala ? Na potrzeby poradnika zrobilem zrzut ekranu programem do analizy ruchu sieciowego (takze na jego potrzeby byl to broadcast :) ale dziala tak samo )

Obrazek


No i na chwile obecna to chyba tyle jesli chodzi o czesc I. Jesli chodzi o punkty warte zwrocenia uwagi to :
  • Pracujac z obsluga sieci zapewnij sobie program do analizy ruchu sieciowego. Ja polecam WireShark'a
  • Zanim powiesz , ze cos nie dziala sprawdz czy jest ruch sieciowy / czy adresy IP sie zgadzaja oraz czy porty sa odpowiednie
  • Pracujac z AVR pomysl o tym jak rozpoznajesz czy nadeszla ramka, ktorej oczekujesz....


Mam nadzieje ,ze sie przyda. Jesli bedzie zapotrzebowanie bedziemy kontynuowac serie.

Pozdrawiam
Raf

Autor:  mirekk36 [ 26 paź 2014, o 01:05 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Rafał to się bardziej nadaje do działu PORADNIKI ;) kawał fajnej roboty ... dla wszystkich CeHaszowników czy tam SiSzarpowców ;)

Autor:  RafPe [ 26 paź 2014, o 01:46 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

mirekk36 napisał(a):
to się bardziej nadaje do działu PORADNIKI


Czytalem zasady i wg tego http://forum.atnel.pl/topic6018.html#p70573 poradnik ten powinien byl tu wyladowac :)


No i zobaczymy czy sie komus przyda ;) jak tak to bedziemy szlifowac dalej ;) takie uzulepnienia dla wyobrazni poruszonej BB'kiem :D

Autor:  programek [ 26 paź 2014, o 08:46 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Dzięki za poradnik ;) Zrobiłem tak jak opisałeś i komunikacja z avr działa :D ( miałem przez chwile kilka error'ow, ale to dlatego, bo brakło tego: using System.Net; )

Autor:  RafPe [ 26 paź 2014, o 09:00 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

programek napisał(a):
Dzięki za poradnik ;) Zrobiłem tak jak opisałeś i komunikacja z avr działa :D ( miałem przez chwile kilka error'ow, ale to dlatego, bo brakło tego: using System.Net; )


To bardzo sie ciesze , ze tak od reki Ci wyszlo!

Jak dobrze pojdzie dzisiaj napisze poradniczek o pierwszym odbieraniu to wtedy bedziesz miec komplet :)


Sent from my iPhone using Tapatalk

Autor:  lukas_ [ 26 paź 2014, o 09:20 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Dzięki RafPe! Mi też się to przyda i czekam z niecierpliwością na więcej:)

Autor:  eMCe2 [ 26 paź 2014, o 09:46 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

No wlasnie odbireanie sie przyda :) bo wysylanie to juz kiedys rozpracowalem na podstawie informacji z sieci ale zeby odbierac asynchronicznie to chetnie podpatrze :)
A czy sie przyda to chyba pytanie retoryczne :) wszystko sie przyda gdzie mozna sie czegos nauczyc ;) ja czekam na wiecej... Duuuzo wiecej... Chetnie wejde w c# jak ktos bedzie prowadzil za reke...
Tak samo sie w c# super parsuje dane... Mozna by to polaczyc z odbiorem po udp a wtedy zrobienie apki do sterowania po LANie to juz powinien byc pikus :)

Autor:  RafPe [ 26 paź 2014, o 09:49 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

eMCe2 napisał(a):
Tak samo sie w c# super parsuje dane... Mozna by to polaczyc z odbiorem po udp a wtedy zrobienie apki do sterowania po LANie to juz powinien byc pikus


Tu masz ogromna racje :D Ostatnio wlasnie robilem apke do domu do obslugi temperatury / sensorow swiatla etc i wyszla bajecznie. Wszystko po UDP. Teraz mam przerwe , bo czekam na nowy laminat zeby je dokonczyc wiec pewnie dopisze reszte poradnikow :D

Autor:  MirkoT [ 26 paź 2014, o 10:41 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

RafPe napisał(a):
eMCe2 napisał(a):
Tak samo sie w c# super parsuje dane... Mozna by to polaczyc z odbiorem po udp a wtedy zrobienie apki do sterowania po LANie to juz powinien byc pikus


Tu masz ogromna racje :D Ostatnio wlasnie robilem apke do domu do obslugi temperatury / sensorow swiatla etc i wyszla bajecznie. Wszystko po UDP. Teraz mam przerwe , bo czekam na nowy laminat zeby je dokonczyc wiec pewnie dopisze reszte poradnikow :D

No właśnie przed chwilą czytałem o Twoich problemach z laminatem
Z przymrużeniem oka można powiedzieć że się cieszę bo dzięki temu "wysmażyłeś" taki super
poradnik i będą dalsze części ;-)
Jak najbardziej dobra robota i ja czekam na nasz ulubiony ciąg dalszy? :)

Autor:  Likwidator [ 26 paź 2014, o 10:47 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

+++++++++++++++++++++++++++++++++++++++

czekam na dalsze informacje!

Edit:

problem:

"Error 2 A field initializer cannot reference the non-static field, method, or property 'SterownikUDP.Form1.ep' "

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ostatnia linijka krzyczy.

Program Visual C# 2010 Express

Autor:  RafPe [ 26 paź 2014, o 10:56 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Cytuj:
Z przymrużeniem oka można powiedzieć że się cieszę


Mnie tez ta sytuacja pozytywnie rozbawila :) Fajnie , ze ktos moze z tych porad skorzystac. W tym wypadku dzis zajmiemy sie pewnie troche zmodyfikowana wersja wysylania :D

------------------------ [ Dodano po: 1 minucie ]

Likwidator napisał(a):
+++++++++++++++++++++++++++++++++++++++

czekam na dalsze informacje!

Edit:

problem:

"Error 2 A field initializer cannot reference the non-static field, method, or property 'SterownikUDP.Form1.ep' "

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ostatnia linijka krzyczy.

Program Visual C# 2010 Express


W liniach kody masz dwa miejsca , ktore musisz uzupelnic o poprawne adresy IP. Czyli :
  • TWOJ ADRES IP co moze byc np 192.168.1.15
  • ADRES IP DOCELOWY a tu moze byc np 192.168.1.100

Zalezy od Twojej sieci komputerowej

Autor:  majster [ 26 paź 2014, o 12:27 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

RafPe kurka nie ma mnie przykompie ale jak tylko zasiade to przeczytam calosc. Dobrze wiesz ze mnie sie przydadza poradniki C# no nie tylko mi ale dzieki i prosze o jeszcze ;)

Namazane ze smarta.

Autor:  RafPe [ 26 paź 2014, o 12:55 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

majster napisał(a):
Dobrze wiesz ze mnie sie przydadza poradniki C#


Majster :) dajesz znaka i robimy sesje na skaJpie :) a Ty tez dobrze wiesz , ze mnie sie przyda kazda wiedza w zakresie elektroniki jak i lutowania :) wiec mozemy sie powymieniac :D

Autor:  JanuszT [ 26 paź 2014, o 13:54 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Witam

Świetny poradnik. Nie ma wątpliwości co do przydatności (kurde, no prawie wierszyk :D ). Bardzo dziękuję i stanowczo :D poproszę o ciąg dalszy.

Pozdrawiam

Autor:  Krauser [ 26 paź 2014, o 18:20 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Wielkie dzięki. Zabieram się za testy.

Autor:  Rafał555 [ 15 sty 2016, o 21:18 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Działa świetnie. Lecę dalej :)

Autor:  dziabi3 [ 25 paź 2016, o 00:13 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

Mnie interesuje tylko jedno , w jakim cel tworzysz IPEndPoint nadawcy?
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Wymuszasz port z którego będzie nadawana wiadomość ?

Autor:  RafPe [ 25 paź 2016, o 20:36 ]
Tytuł:  Re: Visual C# -- Komunikacja UDP - Wysylanie - Czesc I

dziabi3 napisał(a):
Mnie interesuje tylko jedno , w jakim cel tworzysz IPEndPoint nadawcy?
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Wymuszasz port z którego będzie nadawana wiadomość ?


Tak - moglbys to zmienic np na

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


lub po prostu uzyc UdpClient. Jako , ze dosc dawno kiedy pisalem ten poradnik mysle , ze to bylo bardziej w celach szkoleniowych ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/