<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=59&amp;t=9159&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-05-30T22:41:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=59&amp;t=9159&amp;mode</id>
<entry>
<author><name><![CDATA[chemik0]]></name></author>
<updated>2016-05-30T22:41:53+01:00</updated>
<published>2016-05-30T22:41:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=161361#p161361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=161361#p161361"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=161361#p161361"><![CDATA[
Niski pokłon dla kolegi @RafPe za wsparcie i motywację.<br />Ponieważ niespecjalnie jeszcze ogarniam komunikację UDP to strzelę co było przyczyną tego że moja aplikacja na PC nie odbierała danych z AVR-ka (w razie czego proszę o sprostowanie).<br />Jak się okazało pakiet wysyłany z AVR-a (świeżutki i pachniutki) nie będący odpowiedzią na zapytanie z PC-a nie miał adresu MAC odbiorcy, wystarczyło ręcznie wklepać adres MAC na jaki mają być kierowane pakiety i ładnie zaczęło działać.<br /><br />Gdyby komuś... kiedyś.. przydarzył się podobny problem to w kodzie z Bluebook-a w pliku ip_arp_udp_tcp.c zmieniłem w funkcji<br />send_udp_prepare:<br /><br /><br />[syntax=c]uint8_t m&#91;&#93; = {0x00,0xFF,0x00,0xFF,0x00,0xFF}; // tu MAC urządzenia do którego kierujemy pakiet<br />        uint8_t i=0;<br /> <br />        while(i&lt;6)<br />        {<br />                //buf&#91;ETH_DST_MAC +i&#93;=gwmacaddr&#91;i&#93;; // oryginalny kod<br />                buf&#91;ETH_DST_MAC +i&#93;=m&#91;i&#93;; // zmieniony kod<br />                buf&#91;ETH_SRC_MAC +i&#93;=macaddr&#91;i&#93;; // oryginalny kod<br />                i++;<br />        }[/syntax]<br /><br />Jeszcze raz wielkie dzięki dla kolegi @RafPe za ten rewelacyjny tutorial i pomoc przy rozwiązaniu mojego problemu.<br />Pozdrawiam<br />Wojtek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=91">chemik0</a> — 30 maja 2016, o 22:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2016-05-22T12:11:50+01:00</updated>
<published>2016-05-22T12:11:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=161004#p161004</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=161004#p161004"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=161004#p161004"><![CDATA[
Hey @ chemik0, <br /><br />Troche tak czytam Twojego posta i czuje sie zakrecony. Moglbys jasniej opisac <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Gdybys prosze mogl wkleic dane jak sprawdzasz ruch na karcie siecowej to wtedy moglbym dokladnie widziec o co Ci chodzi i byc bardziej w stanie Ci pomoc. <br /><br />Daj znaka <br /><br />Raf<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 22 maja 2016, o 12:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[chemik0]]></name></author>
<updated>2016-05-12T20:05:35+01:00</updated>
<published>2016-05-12T20:05:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=160510#p160510</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=160510#p160510"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=160510#p160510"><![CDATA[
Koledzy bardzo proszę poratujcie, trzeci dzień już siedzę i krew mnie już zalewa.<br />Napisałem sobie programik według poradnika kolegi 'RafPe' i ogólnie wszystko jest OK, ale... , mam problem z odebraniem danych wysyłanych z uC.<br /><br />Na początku jak to wszystko jest połączone:<br />ENC28J60 podłączony bezpośrednio do karty sieciowej komputera - uC odbiera i reaguje na komendy wysyłane z PC, program na PC nie reaguje na dane wysyłane z PC.<br />To wersja która nie do końca działa.<br /><br />Jak skonfiguruję program podając IP karty WiFi i wysyłam dane z terminala UDP na telefonie to wszystko działa zgodnie z oczekiwaniami.<br /><br />Sprawdzam sobie na bieżąco jak wygląda ruch na karcie sieciowej i dane z uC przychodzą do komputera w oczekiwanej postaci.<br /><br />Poniżej kod programu<br /><br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Linq;<br />using System.Text;<br />using System.Net;<br />using System.Net.Sockets;<br />using System.Windows.Forms;<br />using System.Threading;<br /><br />using System.Configuration;<br /><br />namespace UDP_nadawanie<br />{<br /><br />     public partial class Form1 : Form<br />    {<br /><br />        private IPEndPoint ep;<br />        private IPEndPoint ep_destination;<br />        private UdpClient klient;<br /><br />        private IPEndPoint endpoint;            // &lt;-------------------------------- To sa nowo dodane zmienne globalne<br />        private UdpClient sluchacz;             // &lt;--------------------------------  To sa nowo dodane zmienne globalne<br /><br />        public string wiadomosc;<br /><br />        public Form1()<br />        {<br />            InitializeComponent();<br />        }<br /><br />        private void Form1_Load(object sender, EventArgs e)<br />        {<br />            tb_IP_Komputera.Text = Properties.Settings.Default.IP;<br />            tb_PORT_Komputera.Text = Properties.Settings.Default.PC_TX_Port;<br />            tb_PORT_Odbieranie.Text = Properties.Settings.Default.PC_RX_Port;<br />            tb_PORT_Docelowy.Text = Properties.Settings.Default.Dest_Port;<br />        }<br /><br />        private void button1_Click(object sender, EventArgs e)<br />        {<br />            klient.Connect(ep_destination);<br />            // uzywamy naszego textboxa z danymi do wysylania<br />            klient.Send(Encoding.ASCII.GetBytes(tb_Ramka.Text),Encoding.ASCII.GetByteCount(tb_Ramka.Text));<br />           // tb_Ramka.Clear();<br />        }<br /><br />        private void btn_Konfiguracja_Aplikacji_Click(object sender, EventArgs e)<br />        {<br />            #region REGION:Przygotowanie danych<br /><br />            if (String.IsNullOrEmpty(tb_IP_Docelowy.Text) || String.IsNullOrEmpty(tb_IP_Komputera.Text) ||<br />                String.IsNullOrEmpty(tb_PORT_Docelowy.Text) || String.IsNullOrEmpty(tb_PORT_Komputera.Text))<br />            {<br />                MessageBox.Show(&quot;Podaj wszystkie dane&quot;);<br />            }<br /><br />            else<br />            {<br />                ep = new IPEndPoint(System.Net.IPAddress.Parse(tb_IP_Komputera.Text), Convert.ToInt32(tb_PORT_Komputera.Text));<br />                <br />                klient = new UdpClient(ep);<br /><br />                ep_destination = new IPEndPoint(System.Net.IPAddress.Parse(tb_IP_Docelowy.Text), Convert.ToInt32(tb_PORT_Docelowy.Text));<br /><br />                button1.Enabled = button1.Enabled;<br />                btn_Konfiguracja_Aplikacji.Enabled = !btn_Konfiguracja_Aplikacji.Enabled;<br />                <br />            }<br />            #endregion<br /><br />            endpoint = new IPEndPoint(IPAddress.Parse(tb_IP_Komputera.Text), Convert.ToInt32(tb_PORT_Odbieranie.Text));<br /><br />            //endpoint = new IPEndPoint(IPAddress.Any, 0);<br /><br />            sluchacz = new UdpClient(endpoint);<br />            sluchacz.BeginReceive(OdbierajDane, sluchacz);<br />            <br />        }<br /><br />        private void OdbierajDane(IAsyncResult ar)<br />        {<br /> <br />            UdpClient u = (UdpClient)(ar.AsyncState);               // jawne rzutowanie na UDPclient<br />            <br />            Byte&#91;&#93; receiveBytes = u.EndReceive(ar, ref endpoint);   // Wywolujemy zakonczenie odbierania<br /><br /> <br /><br />            wiadomosc = Encoding.ASCII.GetString(receiveBytes);  // String z byte&#91;&#93;<br /><br />            // Wyswietlamy<br />            tb_odebrane.BeginInvoke((Action)(() =&gt; tb_odebrane.AppendText(&quot;&quot;)));<br />            tb_odebrane.BeginInvoke((Action)(() =&gt; tb_odebrane.AppendText(wiadomosc + Environment.NewLine)));<br /><br />            sluchacz.BeginReceive(OdbierajDane, sluchacz);          // Zaczynamy sluchac na nowe pakiety<br />        }<br /><br />         private void button3_Click(object sender, EventArgs e)<br />        {<br />            klient.Connect(ep_destination);<br />            klient.Send(Encoding.ASCII.GetBytes(textBox1.Text), Encoding.ASCII.GetByteCount(textBox1.Text));<br />        }<br /><br />     }<br />    <br /> }[/syntax]<br /><br />a tak wygląda<br /><br /><a href="https://obrazkiforum.atnel.pl/91/3b69cbad96c41fc4861002ba3e8f16c6.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/91/3b69cbad96c41fc4861002ba3e8f16c6.png" alt="Obrazek" /></a><br /><br />Program na uC to niezmieniony kod z Bluebooka 21_ETH_komunikacja_UDP, jako ciekawostkę powiem że z TesteremUDP od Mirka komunikacja z uC działa bez problemu w obie strony więc wykluczam błędy w programie na uC.<br /><br />Będę bardzo wdzięczny za wszelką pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=91">chemik0</a> — 12 maja 2016, o 20:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2016-05-02T20:31:18+01:00</updated>
<published>2016-05-02T20:31:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159784#p159784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159784#p159784"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159784#p159784"><![CDATA[
<div class="quotetitle">bartm71 napisał(a):</div><div class="quotecontent"><br />z procka wysyłam dokładnie:<br />[syntax=c]sprintf(str,&quot;Temp_1 ^ %i&quot;, arg);[/syntax]<br /><br />&quot;arg&quot; to zmienna z wartoscią temperatury zadanej która zmnienam za pomocą programu w C#. Steruje 3 takie temperatury samo sterowanie działa poprawnie natomiast to nieszczesne odbieranie nie chce ze mna wspópracowac tzn. odbieram paczke i wyświatlam  textboxie &quot;Temp_1 ^ 23&quot; itd. zależnie od wartosci temperatury. Tak jak pisałem we wczesniejszym poście próba podziału konczy sie krzakiem.<br />Dzięki za zainteresowanie sie problemem.<br /></div><br /><br /><br />Prosze Cie bardzo - troche przekombinnowales bo zrobiles sobie tablice stringow i to w tym miejscu nie wyjdzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br /><br />namespace ForumAtnel_topic9159<br />{<br />    class Program<br />    {<br />        static void Main(string&#91;&#93; args)<br />        {<br />            char separator = '^';<br />            string wiadomosc= &quot;Temp_1 ^ 23&quot;;<br /><br />            string result = &quot;&quot;;<br /><br />            // Sprawdz czy wiadomosc nie jest null i czy zawiera nasz separator <br />            if (!ReferenceEquals(null, wiadomosc) &amp;&amp; wiadomosc.Contains(separator))<br />            {<br />                result = wiadomosc.Split(separator)&#91;1&#93;.Trim();<br />            }<br /><br />            Console.WriteLine($&quot;Wiadomosc byla: {wiadomosc} -&gt; rezultat: {result}&quot;);<br />            Console.ReadLine();<br />        }<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 2 maja 2016, o 20:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartm71]]></name></author>
<updated>2016-05-02T09:25:56+01:00</updated>
<published>2016-05-02T09:25:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159713#p159713</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159713#p159713"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159713#p159713"><![CDATA[
z procka wysyłam dokładnie:<br />[syntax=c]sprintf(str,&quot;Temp_1 ^ %i&quot;, arg);[/syntax]<br /><br />&quot;arg&quot; to zmienna z wartoscią temperatury zadanej która zmnienam za pomocą programu w C#. Steruje 3 takie temperatury samo sterowanie działa poprawnie natomiast to nieszczesne odbieranie nie chce ze mna wspópracowac tzn. odbieram paczke i wyświatlam  textboxie &quot;Temp_1 ^ 23&quot; itd. zależnie od wartosci temperatury. Tak jak pisałem we wczesniejszym poście próba podziału konczy sie krzakiem.<br />Dzięki za zainteresowanie sie problemem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7911">bartm71</a> — 2 maja 2016, o 09:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2016-05-01T12:17:36+01:00</updated>
<published>2016-05-01T12:17:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159668#p159668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159668#p159668"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159668#p159668"><![CDATA[
Wklej dokładnie jak wygląda wiadomość <br /><br />Sent from my GT-I9506 using Tapatalk<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 1 maja 2016, o 12:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartm71]]></name></author>
<updated>2016-04-30T19:07:22+01:00</updated>
<published>2016-04-30T19:07:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159634#p159634</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159634#p159634"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159634#p159634"><![CDATA[
Witam dopiero zaczynam jaką kolwiek zabwe z c#. Program wysyła i odbiera dane z procka mam tylko problem z tym podziałem tzn jezeli zdefiniuje sobie jakis łańcuch znaków w programie to nie ma problemu ładnie dzieli. Problem natomiast sie zaczyna gdy podstawiam zmienna &quot;wiadomosc&quot; program sie  wykrzacza... poniżej ta część kodu.<br />Pozdrawiam.<br /><br />[syntax=csharp]public void mss()<br />        {<br />            string&#91;&#93; separators = { &quot;^&quot; };<br />            string&#91;&#93; words = wiadomosc.Split(separators, StringSplitOptions.RemoveEmptyEntries);<br />            foreach (var word in words)<br />               Temp_z_2.Text=(words&#91;1&#93;);<br />          <br /><br />        }<br />        public void Odbierz_Dane()<br />        {<br /><br />            Task.Factory.StartNew(async () =&gt;<br />            {<br />                while (true)<br />                {<br />                    // Czekaj na wiadomosci UDP asynchronicznie<br />                    var received = await sluchacz.ReceiveAsync();<br />                    // Zmien byte na string<br />                    wiadomosc = Encoding.ASCII.GetString(received.Buffer, 0, received.Buffer.Length);<br />                    // wyslij wiadomosc do naszej kontrolki tekstowej<br />                   Temp_z_1.BeginInvoke((Action)(() =&gt; Temp_z_1.AppendText(wiadomosc + Environment.NewLine)));<br /><br />                    <br />                <br />                    <br />                }<br />            });<br /><br />        }[/syntax]<br />Komunikat błędu<br />An unhandled exception of type 'System.NullReferenceException' occurred in Sterownik.exe<br /><br />Additional information: Object reference not set to an instance of an object.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7911">bartm71</a> — 30 kwi 2016, o 19:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2016-04-27T21:49:56+01:00</updated>
<published>2016-04-27T21:49:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159501#p159501</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159501#p159501"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159501#p159501"><![CDATA[
String i funkcja split albo możesz też użyć index Of <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> jak spróbujesz jakiś kod wkleić to wtedy może będzie można Ci pomoc<br /><br />Sent from my GT-I9506 using Tapatalk<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 27 kwi 2016, o 21:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartm71]]></name></author>
<updated>2016-04-26T20:12:02+01:00</updated>
<published>2016-04-26T20:12:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159391#p159391</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159391#p159391"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=159391#p159391"><![CDATA[
Witam kolegów mam takie pytanie. <br />Chciałbym odebrac ramke z uc która wygląda powiedzmy &quot;1 ^ 45 &quot; teraz by trzeba ten łańcuch podzielic i zapisać wartość 45 do odpowiedniej zmiennej którą wyznaczy znacznik 1. I za nic nie mogę z tym sobie poradzic dopiero raczkuję w c#. Udaję mi się tylko dobierać ramkę i wyświetlić w textboxie tak jak to było tu w wątki przedstawione. Z góry dzięki za pomoc!<br />Pozdrawiam Bartek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7911">bartm71</a> — 26 kwi 2016, o 20:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2016-01-18T18:23:03+01:00</updated>
<published>2016-01-18T18:23:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150971#p150971</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150971#p150971"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150971#p150971"><![CDATA[
A nie. Nic takiego. W międzyczasie dowiedziałem się co to jest &quot;Linq&quot;. To właśnie te jakieś &quot; =&gt; &quot; mnie przestraszyły w twoim kodzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 18 sty 2016, o 18:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2016-01-17T23:30:14+01:00</updated>
<published>2016-01-17T23:30:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150911#p150911</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150911#p150911"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150911#p150911"><![CDATA[
<div class="quotetitle">Rafał555 napisał(a):</div><div class="quotecontent"><br />Udało się <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /> Tylko jak to pojąć? <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /></div><br /><br /><br />To pisz z czym masz problem to postaram Ci sie nakreslic co i jak <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 17 sty 2016, o 23:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2016-01-17T19:42:26+01:00</updated>
<published>2016-01-17T19:42:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150866#p150866</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150866#p150866"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=150866#p150866"><![CDATA[
Udało się <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /> Tylko jak to pojąć? <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 17 sty 2016, o 19:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jachu]]></name></author>
<updated>2015-01-08T23:33:28+01:00</updated>
<published>2015-01-08T23:33:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=113274#p113274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=113274#p113274"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=113274#p113274"><![CDATA[
Kawal dobrej roboty <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=110">jachu</a> — 8 sty 2015, o 23:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sz4t4n]]></name></author>
<updated>2015-01-08T23:04:36+01:00</updated>
<published>2015-01-08T23:04:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=113268#p113268</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=113268#p113268"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=113268#p113268"><![CDATA[
Potwierdzam że to działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> dzięki wielkie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=377">sz4t4n</a> — 8 sty 2015, o 23:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-11-14T14:39:02+01:00</updated>
<published>2014-11-14T14:39:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103944#p103944</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103944#p103944"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103944#p103944"><![CDATA[
To teraz czekam na info czy wszystkim sie udalo odbierac <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 14 lis 2014, o 14:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-11-13T21:13:16+01:00</updated>
<published>2014-11-13T21:13:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103856#p103856</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103856#p103856"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103856#p103856"><![CDATA[
Dzięki bardzo za 3 część poradnika.<br />Przyda się bardzo <img src="https://forum.atnel.pl/images/smilies/icon_exclaim.gif" alt=":!:" title="Wykrzyknik" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 13 lis 2014, o 21:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-11-12T21:34:28+01:00</updated>
<published>2014-11-12T21:34:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103641#p103641</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103641#p103641"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103641#p103641"><![CDATA[
async... await... - trzeba się poduczyć. Ciekawe jak wyglądałaby obsługa portu szeregowego w takim wykonaniu?<br />Dzięki za kolejne klocki do zabawy  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 12 lis 2014, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-11-11T13:02:26+01:00</updated>
<published>2014-11-11T13:02:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103347#p103347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103347#p103347"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103347#p103347"><![CDATA[
U mnie trzeba zrobic sprzatanie i porzadki a dzieki poradnikowi jak coś skopie to bedę mógł to w łatwy sposób naprawić.<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 11 lis 2014, o 13:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-11-11T11:15:18+01:00</updated>
<published>2014-11-11T11:15:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103330#p103330</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103330#p103330"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103330#p103330"><![CDATA[
<div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />Może by z tego zrobić jeden poradnik wideo ?<br /></div><br /><br />No to Mirek musialby usiasc w koncu do C# <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Ciesze sie , ze cos Ci pomoglo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> chociaz myslalem , ze w Twoim programie mamy juz wszystko <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 11 lis 2014, o 11:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-11-11T11:04:06+01:00</updated>
<published>2014-11-11T11:04:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103328#p103328</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103328#p103328"/>
<title type="html"><![CDATA[Re: Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103328#p103328"><![CDATA[
Ha ha po takim czasie pierwszy ... dzięki za 3 poradniczki. Przerabialiśmy to wcześniej w moim programie. Nie mniej dzięki tym poradnikom wszystko jest dla mnie jaśniejsze. Jak już zrobię płytkę i dojdą klamoty to pozmieniam sobie pare rzeczy w programie dzięki tobie.<br /><br />Przydatny zastrzyk atnelański w 3 poradnikach. Może by z tego zrobić jeden poradnik wideo ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 11 lis 2014, o 11:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-11-09T16:28:36+01:00</updated>
<published>2014-11-09T16:28:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103023#p103023</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103023#p103023"/>
<title type="html"><![CDATA[Visual C# -- Komunikacja UDP - Odbieranie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9159&amp;p=103023#p103023"><![CDATA[
<span style="font-size: 150%; line-height: normal">Wstep</span><br /><br />Witam wszystkich po dosc dlugiej przerwie. Jak niektorzy sprawnie zauwazyli ... zajmowalem sie prawie fabrycznym wytwarzaniem plytek PCB. Kurcze bo jak sie zacznie to pozniej smigaja jedna za druga.<br /><br />No ale zeby to wszystko ze soba gadalo - trzeba miec dwukierunkowa komunikacje. I dzisiaj wlasnie taka zrobimy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Jako , ze dzisiaj humor dopisuje .... zaczynamy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/2d3638a5000c98dc078a4617da046643.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/2d3638a5000c98dc078a4617da046643.png" alt="Obrazek" /></a><br /><br /><span style="font-size: 150%; line-height: normal">Wymagania</span><br /><br />Jako , ze jest to 3'cia czesc poradnika nie bede poruszac juz kwestii ktore omowilem we wczesniejszych poradnikach. <br />Wiec jesli ktos chcialbys naprawde zrozumiec calosc prosze Cie o przeczytanie poprzednich czesci. <br /><br />[list=]<br />[*] Czesc I  : <a href="http://forum.atnel.pl/topic8960.html"  class="postlink">http://forum.atnel.pl/topic8960.html</a><br />[*] Czesc II : <a href="http://forum.atnel.pl/topic8978.html"  class="postlink">http://forum.atnel.pl/topic8978.html</a><br />[/list]<br /><br /><br /><span style="font-size: 150%; line-height: normal">Czym sie zajmiemy</span><br /><br />Wiec tak jak wspominalem wczesniej skoro poznalismy wysylanie to poznamy teraz odbieranie. <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/b39da5bd7d1197bc6926c138a0c8d4fa.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/b39da5bd7d1197bc6926c138a0c8d4fa.jpg" alt="Obrazek" /></a><br /><br /><br />A poniewaz chcialbym , zebyscie wszyscy mogli poznac plusy i minusy kilku podejsc , ktore tu poznamy bedziemy omawiac je uzywajac kilka programistycznych sposobow. Jednakze , ze nie jest to lekcja dla developerow po dokladnie techniczne informacje odyslam Was do wujka &quot;google&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br /><span style="font-size: 150%; line-height: normal">Przygotowanie aplikacji</span><br /><br />W tym wypadku zmodyfikowalem troszeczke aplikacje , ktorej uzywamy. Pozmienialem polozenie naszych guzikow , dodalem sobie kilka komponentow jak obrazki. <br /><br />Ale ten najwazniejszy to dodanie kontrolki typu <strong>TextBox</strong> o nazwe <strong>tb_odebrane</strong>. Bedzie ona nam sluzyla jako okno do danych ktore sobie odbieramy<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/6662c34565bcebbef35b66053a8bab62.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/6662c34565bcebbef35b66053a8bab62.png" alt="Obrazek" /></a><br /><br /><span style="font-size: 150%; line-height: normal">Odbieranie - proba pierwsza</span><br /><br />Zaczniemy od zdefiniowania w kodzie - potrzebnych nam danych. Dane beda nastepujacego typu <br /><br />[syntax=csharp]IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 9999);<br />UdpClient  sluchacz = new UdpClient(endpoint);[/syntax]<br /><br />Pytanie .... gdzie umiescic te zmienne ? Wiec zaczniemy od umieszczenia ich w metodzie , ktora jest wywolywana po nacisnieciu guzika <strong>Konfiguruj</strong><br /><br />ale... jesl zwrocisz uwage ... chyba beda potrzebne nam nowe kontrolki. Musimy sobie byc w stanie zdefiniowac na jakim porcie bedziemy nasluchiwac komunikacji ktora chcemy odebra. <br /><br />Wiec najpierw dodamy nowa kontrolke typu <strong>TextBox</strong> o nazwe <strong>tb_PORT_Odbieranie</strong> a posluzy ona nam do podania numeru portu , ktory wykorzystamy do odbierania danych.<br /><br />Wiec nasza AD HOC zmodyfikowana aplikacja wyglada nastepujaco :<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/7138a9418de538e3558113b03e70734b.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/7138a9418de538e3558113b03e70734b.png" alt="Obrazek" /></a><br /><br />Czyli posiada teraz kontrolke ktora umozliwi nam dalsza prace z odbieraniem.<br /><br />Wiec teraz mozemy wrocic juz do wlasciwego kodu ktory umozliwi nam odbieranie. Klikamy dwa razy na nasz guzik odpowiedzialny za konfiguracje i przenosimy sie dzieki tem automatycznie do metody ktora jest odpowiedzialna za obsluge tego zdarzenia. <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/5e9e5e638f9a2a441a7e7215a84129a0.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/5e9e5e638f9a2a441a7e7215a84129a0.png" alt="Obrazek" /></a><br /><br />Dodamy na samym koncu istniejeacego juz kodu nastepujace dwie linie <br /><br />[syntax=csharp]IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(tb_IP_Komputera.Text), Convert.ToInt32(tb_PORT_Odbieranie.Text));<br />            UdpClient  sluchacz = new UdpClient(endpoint);[/syntax]<br /><br />Teraz kod wygladac powinenen cos w tym stylu : <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/8ba52efd9ec2257f123ee1bcf38ce78c.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/8ba52efd9ec2257f123ee1bcf38ce78c.png" alt="Obrazek" /></a><br /><br />Podjerzewam , ze powyzsza czesc kodu jest juz Ci znajoma prawda ? Wiec jest ona odpowiedzialna za utworzenie klienta UDP. Zostanie on tym razem utworzony na naszym porcie przeznaczonym do nasluchiwania oraz na IP naszego komputera.<br /><br />Jednak czy to wystarczy ? :O <br /><br />No oczywiscie , ze nie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nasza zmienna <strong>sluchacz</strong> (bo tak sobie ja nazwalem ) musi przeciez cos robic. Wiec musimy wykonac metode. <br />Metoda do odbierania ladnie jest opisana w dokumentacji (<a href="http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.receive(v=vs.110).aspx"  class="postlink">http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.receive(v=vs.110).aspx</a> )<br /><br />W zwiazku z czym dodajemy w kodzie naszej konfiguracji linie kodu <br /><br />[syntax=csharp]sluchacz.Receive(ref endpoint);[/syntax]<br /><br />Kod wyglada teraz tak <br /><a href="http://forum.atnel.pl/_obrazki/o/4344/1f0ffcf790ed29a3a46cd3b02dfc4e2b.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/1f0ffcf790ed29a3a46cd3b02dfc4e2b.png" alt="Obrazek" /></a><br /><br /><span style="font-size: 150%; line-height: normal">Wiec <strong>odpalamy nasz program</strong> i obserwujemy co sie dzieje! </span><br /><br /><br /><br /><br /><br /><br /><span style="font-size: 150%; line-height: normal">Wnioski - proba pierwsza</span><br />Wiec okazuje sie ,ze jak tylko odpalilismy program przestal dzialac ? Dlaczego tak sie stalo ? No wiec patrzymy na dokumentacje (przelaczylem ja specjalnie na jezyk PL ale to chyba nie byl dobry pomysl ) <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/6180cef127790737237fb9f18daf2bbf.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/6180cef127790737237fb9f18daf2bbf.png" alt="Obrazek" /></a><br /><br />Wiec oczywiste staje sie ,ze mamy tzw <strong>watek blokujacy</strong> No i teraz co z tym babolem !? hehehhe wiec sprobujmy troszeczke innego podejscia.<br /><br /><br /><span style="font-size: 150%; line-height: normal">Odbieranie - proba druga</span><br /><br />Wiec dobrze- poznalismy jak przygotowac odbieranie teraz zrobmy zeby dzialalo. <br />Pierwsze co zrobimy to usuniemy wczesniej dodana czesc kodu z metody konfiguracji guzika zostawiajac go tak jak bylo wczesniej. Powod ? Musimy zrobic tak aby nasze zmienne byly dostepne nie tylko w tamtej metodzie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br /><br />Zaczynamy od poprawnego skonfigurowania zmiennych. Zaznaczylem w kodzie gdzie powinny byc. <br />[syntax=csharp]//  TUTAJ DODAMY ZMIENNE GLOBALNE <br /><br />        private IPEndPoint ep;<br />        private IPEndPoint ep_destination;<br />        private UdpClient klient;<br /><br />        private IPEndPoint endpoint;            // &lt;-------------------------------- To sa nowo dodane zmienne globalne<br />        private UdpClient sluchacz;             // &lt;--------------------------------  To sa nowo dodane zmienne globalne<br /><br />        // &lt;----------- END ---------=-- &gt;[/syntax]<br /><br />Teraz w metodzie konfiguracyjnej (czyli tej ktora osbluguje guzik do Konfiguracji) - tak jak z pozostalymi elementami dodamy konfiguracje naszego odbierania <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/20d6519bc9c36d65a22c38fdd1749013.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/20d6519bc9c36d65a22c38fdd1749013.png" alt="Obrazek" /></a><br /><br />Zwroc prosze uwage  ,ze kod ktory pewnie masz w tej metodzie zaznaczylem &quot;zielona&quot; strzalka i &quot;zwinalem&quot; dla wiekszej czytelnosci. Kod ktory dodalismy znajduje sie zaznaczony czerwona strzalka. <br /><br />[syntax=csharp]// Konfiguracja nasluchiwania<br />            endpoint = new IPEndPoint(IPAddress.Parse(tb_IP_Komputera.Text), Convert.ToInt32(tb_PORT_Odbieranie.Text));<br />            sluchacz = new UdpClient(endpoint);[/syntax]<br /><br />To co dzieje sie w tej metodzie jest juz Ci znane <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> wiec nie bedziemy niepotrzebnie walkowac tego samego.<br /><br />Wiec gdzie umiescimy nasze odbieranie ? No proste ... tuz po wyslaniu chcemy odebrac. Wiec klikamy dwa razy na guzik odpowiedzialny za wysylanie , ktor automatycznie wysyla nas do metody wywolywanej w odpowiedzi na to zdarzenie. <br /><br />Dodajemy linie kodu i nasza metoda wyglada nastepujaco : <br /><br />[syntax=csharp]private void button1_Click(object sender, EventArgs e)<br />        {<br /><br />            klient.Connect(ep_destination);<br />            <br />            // uzywamy naszego textboxa z danymi do wysylania<br />            klient.Send(Encoding.ASCII.GetBytes(tb_Ramka.Text),<br />                Encoding.ASCII.GetByteCount(tb_Ramka.Text)<br />                );<br /><br />            tb_Ramka.Clear();<br /><br />            sluchacz.Receive(ref endpoint); // &lt;----------------------- TO DODALISMY !<br /><br />        }[/syntax]<br /><br /><br />Jestesmy juz na etapie , ze zanim odpalimy program chcielibysmy juz widziec , ze cos odebralismy. Wiec musimy jakos nasze dane wyswietlic na specjalnie dodanej do tego kontrolce (tej ktora dodalismy wczesniej (u mnie nazywa sie tb_odebrane) <br /><br />Zmieniamy wiec znowy guzik ktory wysyla nasz kod <br /><br />[syntax=csharp]private void button1_Click(object sender, EventArgs e)<br />        {<br /><br />            klient.Connect(ep_destination);<br />            <br />            // uzywamy naszego textboxa z danymi do wysylania<br />            klient.Send(Encoding.ASCII.GetBytes(tb_Ramka.Text),<br />                Encoding.ASCII.GetByteCount(tb_Ramka.Text)<br />                );<br /><br />            tb_Ramka.Clear();<br /><br />            // sluchacz.Receive(ref endpoint); // &lt;----------------------- TO USUWAMY !<br /><br />            // TO DODALISMY<br />            tb_odebrane.Text += Encoding.ASCII.GetString(sluchacz.Receive(ref endpoint));<br /><br />        }[/syntax]<br /><br />Wiec omowmy dokladnie co tutaj sie dzieje (dla latwosci uzylem kolorowych strzalek ) <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/b66907189ad8aa9d300ae26a2172ab58.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/b66907189ad8aa9d300ae26a2172ab58.png" alt="Obrazek" /></a><br /><br /><ul><li> Zielona strzalka - wskazuje na to ze chcemy wpisac we wlasciwosc <strong>Text</strong> naszej kontrolki. Robilismy to juz wczesniej wiec to tylko takie male przypomnienie</li><li> Niebieska strzala - wykorzystuje domyslna metode zajmujaca sie ASCII aby z byte[] wyswietlic string. Uzywamy metody <strong>GetString</strong></li><li> Czerwona strzala - tutaj podajemy nasza zmienna i od razu uruchamiamy metoda odbierajaca dane.</li></ul><br /><br /><br />Hmmm no i co teraz ? Odpalamy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Potrzebne nam tylko urzadzenie , ktore wysle nam pakiet na port RX (ten na ktorym nasluchujemy ) Dla celow pokazowych uzyje skryptu , ktory wysle mi okreslony ciag znakow zeby pokazac Wam , ze to dziala jak nalezy <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/04e3cbe55b89a1a1fdd574b6c945ea8b.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/04e3cbe55b89a1a1fdd574b6c945ea8b.png" alt="Obrazek" /></a><br /><a href="http://forum.atnel.pl/_obrazki/o/4344/c0d074829a3a39097ea7a56e72e3fc82.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4344/c0d074829a3a39097ea7a56e72e3fc82.png" alt="Obrazek" /></a><br /><br />Na drugim obrazku wyraznie widac , ze aplikacja odebrala to co wyslal moj skrypt ( zamiast skryptu proponuje uzyc ATB <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  - ja uzywam skryptu bo jest mi szybciej napisac poradnik ) <br /><br /><span style="font-size: 150%; line-height: normal">Wnioski - proba druga</span><br />Wiec juz jest troszeczke lepiej bo mozemy ladnie sobie skonfigurowac aplikacje , ale co sie dzieje kiedy wysylasz pakiet ? No niestety - dopoki nie odbierzesz pakietu cala aplikacja wisi i nic sie nie da zrobic :O A co gorsza .... co sie stanie jak nie otrzymamy pakietu ? <br /><br />Na powyzsze mozesz odpowiedziec pewnie sobie sam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><br /><span style="font-size: 150%; line-height: normal">Odbieranie poprawnie - podejscie 3 i pol <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /></span><br /><br />Wiec abysmy mogli poprawnie odbierac dane nie zaklocajac pracy naszego programu musimy podejsc do problemu technologicznie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> wrzucimy go sobie tak , aby wykonywal sie &quot;niewidocznie&quot; dla nas lub wykonywal sie tylko kiedy nadleca dane ktore trzeba odebrac. <br /><br />Podzielimy ten poradnik na 2 : dla tych ktorzy korzystaja z .Net 4.5(1) oraz dla pozostalych <br /><br /><span style="font-size: 150%; line-height: normal">.Net 4.5.1</span><br />Jesli zagladasz tu to droga do sukcesu jest naprawde krotka. Tworzymy nowa metode ktora bedzie caly czas w tle sprawdzac czy nadlecialy nowe dane i jesli tak to uaktualni nasze pole tekstowe. <br /><br />Kod metody <br /><br />[syntax=csharp]/// &lt;summary&gt;<br />        /// Metoda odpowiedzialna za odbior<br />        /// &lt;/summary&gt;<br />        public void Odbierz_Dane()<br />        {<br /><br />            Task.Factory.StartNew(async () =&gt;<br />            {<br />                while (true)<br />                {<br />                    // Czekaj na wiadomosci UDP asynchronicznie <br />                    var received = await sluchacz.ReceiveAsync();<br />                    // Zmien byte na string <br />                    var wiadomosc = Encoding.ASCII.GetString(received.Buffer, 0, received.Buffer.Length);<br />                    // wyslij wiadomosc do naszej kontrolki tekstowej<br />                    tb_odebrane.BeginInvoke((Action)(() =&gt; tb_odebrane.AppendText(wiadomosc + Environment.NewLine)));<br />                }<br />            });<br /><br />        }[/syntax]<br /><br />A teraz szybkie objasnienie (jako , ze wiekszosc ma komentarz ) to ciekawa jest ostatnia linia. Jest to sposob aby uaktualnic kontrolke kiedy jestesmy w innym watku niz glowny watek aplikacji. Gdybysmy tego nie mieli napisanego w ten sposob aplikacja bylaby niestabilna/wysypala by sie / lub nie pokazywalby nadchodzacych wiadomosci.<br /><br />A teraz tylko dodajemy wywolanie naszej metody w konfiguracji i po wszystkim <br /><br />[syntax=csharp]private void btn_Konfiguracja_Aplikacji_Click(object sender, EventArgs e)<br />        {<br /><br />            // ............ POZOSTALA CZESC KODU KTORA JUZ MASZ<br /><br />            // Konfiguracja nasluchiwania<br />            endpoint = new IPEndPoint(IPAddress.Parse(tb_IP_Komputera.Text), Convert.ToInt32(tb_PORT_Odbieranie.Text));<br />            sluchacz = new UdpClient(endpoint);<br /><br /><br />            // Konfiguracja metody dzialajacej asynchronicznie<br />            Odbierz_Dane();                                       // &lt;------------------------- TO DODANO <br /><br />        }[/syntax]<br /><br />I po tym malym zabiegu masz calkowicie dzialajaca aplikacje. Uruchamiasz , klikasz konfiguruj po podaniu wszystkich danych i voilla <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br /><br /><span style="font-size: 150%; line-height: normal">~ .Net 4</span><br />Jesli nie uzywasz .Net 4.5(1) to podejscie bedzie troszeczke inne <br /><br />Tworzymy nowa metode <br /><br />[syntax=csharp]private void OdbierajDane(IAsyncResult ar)<br />        {<br />            <br />        }[/syntax]<br /><br /><br />W metodzie ktora konfiguruje nasza aplikacje dodajemy linie <br /><br />[syntax=csharp]sluchacz.BeginReceive(OdbierajDane, sluchacz);[/syntax]<br /><br />W zasadzie mozna powiedziec , ze mowimy cos w rodzaju ... &quot;zacznij sluchac korzystajac ze zmiennej <strong>sluchacz</strong> i skocz do metody <strong>OdbierajDane</strong> jak tylko pojawia sie nowe dane&quot; <br /><br />Oczywiscie , jest to bardzo skrocona definicja ale powinna dac Ci jakies lepsze wyobrazenia dlaczego robimy to w ten sposob.<br /><br /><br />Teraz uzupelnimy nasza metode Odbierania danych <br /><br />[syntax=csharp]private void OdbierajDane(IAsyncResult ar)<br />        {<br />            UdpClient u = (UdpClient)(ar.AsyncState);               // jawne rzutowanie na UDPclient<br />            <br /><br />            Byte&#91;&#93; receiveBytes = u.EndReceive(ar, ref endpoint);   // Wywolujemy zakonczenie odbierania<br /><br />            string wiadomosc = Encoding.ASCII.GetString(receiveBytes);  // String z byte&#91;&#93;<br /><br />            // Wyswietlamy<br />            tb_odebrane.BeginInvoke((Action)(() =&gt; tb_odebrane.AppendText(wiadomosc + Environment.NewLine)));<br /><br />            sluchacz.BeginReceive(OdbierajDane, sluchacz);          // Zaczynamy sluchac na nowe pakiety<br />        }[/syntax]<br /><br />No i to wszystko! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><span style="font-size: 150%; line-height: normal">Podziekowania / Wnioski / Zaluzje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> </span><br />Obie wyzej wymienione metody dzialaja wysmienice <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />Gdyby ktos zlapal jakies babole zapraszam do komentowania.<br /><br />Dla potwierdzenia video obslugujace Callbacki i Async <br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />W tym miejscu chcialem Wam podziekowac za uwage i mam nadzieje , ze sie Wam przyda w/w kod. Jednosczesnie sorry za totalny chaos <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> w poradniku. Mam nadzieje, ze wylapiecie to co Wam potrzebne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 9 lis 2014, o 16:28</p><hr />
]]></content>
</entry>
</feed>