<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Γλώσσες προγραμματισμού</title><link>https://www.dotnetzone.gr:443/cs/forums/74/ShowForum.aspx</link><description>Τα πρώτα βήματα στις γλώσσες VB6, VB.NET, και C#</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: UDP Socket Exception</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45491.aspx</link><pubDate>Thu, 16 Oct 2008 01:24:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45491</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45491.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=45491</wfw:commentRss><description>&lt;P&gt;Ο Άγγελος έχει δίκιο. Αντί για το while (true) θα πρέπει να καλείς μέσα στην EndReceive ξανά την BeginReceive. Έτσι αρχίζεις να ξανακούς αμέσως μόλις λάβεις κάτι. Το while (true) έχει ως αποτέλεσμα να δημιουργούνται συνέχεια listeners με αποτέλεσμα να φτάσεις σχεδόν αμέσως στο όριο των πόσων listeners μπορείς να σηκώσεις. Πέρα από αυτό, ακόμα και αν δεν έσκαγε το πρόγραμμα μέχρι να λάβεις κάτι, θα προσπαθούσαν όλοι οι listeners μαζί να το επεξεργαστούν. Χάος.&lt;/P&gt;
&lt;P&gt;Την τεχνική του BeginReceive μέσα στο EndReceive την περιγράφει κάποιο άρθρο στο MSDN, απλά όχι αυτό που σου είχα πει νωρίτερα. Το άρθρο ήταν λίγο δύστροπο γιατί .... έδειχνε και Begin/EndReceive και Begin/EndRead μέσα στην Receive με αποτέλεσμα να είναι ... ελαφρώς περίπλοκο.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Όσον αφορά το IP*Works που πρότεινε ο oldgeorge, είναι όντως μία πολύ καλή σουίτα ... αν θέλεις μία σουίτα από networking components. Θα σε γλυτώσει από τη φασαρία να μάθεις να δουλεύεις με ασύγχρονες κλήσεις και σου δίνει πολύ περισσότερα από απλά ένα εύκολο τρόπο να μιλήσεις με UDP. Από την άλλη, κάποια στιγμή θα πρέπει να μάθεις να δουλεύεις και με τον ασύγχρονο τρόπο ενώ τα $300 του IP*Works είναι πολλά αν το μόνο που σε ενδιαφέρει είναι να φτιάξεις ένα utilitάκι.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Re: Απ: UDP Socket Exception</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45454.aspx</link><pubDate>Tue, 14 Oct 2008 22:43:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45454</guid><dc:creator>Oldgeorge</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45454.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=45454</wfw:commentRss><description>&lt;P&gt;Κάποια στιγμή που είχα μπλέξει σε ένα σχετικό εγχείρημα, είχα δει φως με &lt;A href="http://www.nsoftware.com/products/component/udpport.aspx"&gt;αυτό&lt;/A&gt;, το οποίο δουλεύει αποδεδειγμένα πολύ ωραία σε non blocking mode επικοινωνία. Δυστυχώς δεν το χρησιμοποιήσαμε στην τελική λύση (για άσχετους λόγους) οπότε δεν μπορώ να πω 100% ότι δουλεύει χωρίς σφάλματα σε πραγματικό περιβάλλον, αλλά αν είναι τόσο σημαντικό να κερδίσεις performance overhead αξίζει να του ρίξεις μια ματιά. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: UDP Socket Exception</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45435.aspx</link><pubDate>Tue, 14 Oct 2008 04:12:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45435</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45435.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=45435</wfw:commentRss><description>&lt;P&gt;Και εγώ αυτο έχω καταλάβει φίλε μου αλλά θέλω να ακούω συνεχώς για incoming messages από UDP (syslog) οπότε το γυρίζω σε σύγχρονη λήψη και βλέπουμε (τι χάνουμε κτλ).&lt;/P&gt;
&lt;P&gt;Πάντως δεν μπορεί να μην υπάρχει ένας τρόπος να ακούει συνεχώς ασύγχρονα μηνύματα...&lt;/P&gt;</description></item><item><title>Απ: UDP Socket Exception</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45432.aspx</link><pubDate>Tue, 14 Oct 2008 02:45:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45432</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45432.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=45432</wfw:commentRss><description>Χωρίς να είμαι απόλυτα σίγουρος για αυτό που λέω - δεν είμαι μπροστά σε dev. μηχάνημα - νομίζω ότι η χρήση του ασύγχρονου API,&amp;nbsp; σε συνδιασμό με το while (true) είναι που γεμίζει τους buffers σου; Η υπόθεσή μου είναι ότι το .BeginReceive στο συγκεκριμένο loop καλείται απλώς συνέχεια, γιατί δεν περιμένει να κάνει όντως ένα receive, βγαίνει κατευθείαν απο την κλήση και λόγω του while .. την ξανακάνει άπειρες φορές;&lt;br&gt;&lt;br&gt;Γιατί θες να χρησιμοποιήσεις το ασύγχρονο API ( &lt;i&gt;καλά ... ανατριχιάζω κι ο ίδιος με αυτό που λέω τώρα, την εποχή που θέλουμε να γυρνάμε σε ασύγχρονη επεξεργασία όσο μπορούμε&lt;/i&gt; &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-2.gif" alt="Big Smile" /&gt; ... ) ντε και καλά; &lt;br&gt;</description></item><item><title>UDP Socket Exception</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45429.aspx</link><pubDate>Tue, 14 Oct 2008 00:43:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45429</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45429.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=45429</wfw:commentRss><description>&lt;P&gt;Με while loop του παρακάτω κώδικα (&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;while&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt; (processWorking == &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;true&lt;/SPAN&gt;)...&lt;/FONT&gt;)&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;const&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;int&lt;/SPAN&gt; listenPort &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; 514;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;class&lt;/SPAN&gt; UdpState&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; UdpClient u;&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; IPEndPoint e;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;void&lt;/SPAN&gt; ReceiveCallback(IAsyncResult ar)&lt;BR&gt;{&lt;BR&gt;UdpClient u &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; (UdpClient)((UdpState)(ar.AsyncState)).u;&lt;BR&gt;IPEndPoint e &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; (IPEndPoint)((UdpState)(ar.AsyncState)).e;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Byte[] receiveBytes &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; u.EndReceive(ar, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ref&lt;/SPAN&gt; e);&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;string&lt;/SPAN&gt; receiveString &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; Encoding.ASCII.GetString(receiveBytes);&lt;BR&gt;LogMessageToFile(receiveString);&lt;BR&gt;Console.WriteLine(&lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;"Received:"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;+&lt;/SPAN&gt; receiveString);&lt;BR&gt;ProcessSocketData(receiveString);&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:green;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;//Console.WriteLine("Received: {0}", receiveString);&lt;/SPAN&gt;&lt;BR&gt;messageReceived &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;true&lt;/SPAN&gt;;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;void&lt;/SPAN&gt; StartListener()&lt;BR&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;bool processWorking = &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;true&lt;/SPAN&gt;;&lt;BR&gt;&lt;BR&gt;IPEndPoint e &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; IPEndPoint(IPAddress.Any, listenPort);&lt;BR&gt;UdpClient u &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; UdpClient(e);&lt;BR&gt;UdpState s &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; UdpState();&lt;BR&gt;&lt;BR&gt;s.e &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; e;&lt;BR&gt;&lt;BR&gt;s.u &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;=&lt;/SPAN&gt; u;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;while&lt;/SPAN&gt; (processWorking == &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;true&lt;/SPAN&gt;)&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;try&lt;/SPAN&gt;&lt;BR&gt;{&lt;BR&gt;u.BeginReceive(&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; AsyncCallback(ReceiveCallback), s);&lt;BR&gt;}&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;catch&lt;/SPAN&gt; (Exception ex)&lt;BR&gt;{&lt;BR&gt;Console.WriteLine(&lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;"Exception:"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;+&lt;/SPAN&gt; ex);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Console.Write(&lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;"."&lt;/SPAN&gt;);&lt;BR&gt;&lt;BR&gt;Thread.Sleep(100);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;void main(){&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;StartListener();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;έχουμε exception:&lt;/P&gt;
&lt;P&gt;an operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Πως μπορούμε να αποφύγουμε να γεμίσει το buffer;&lt;/P&gt;</description></item></channel></rss>