<?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>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>System.IO.IOException: Unable to read data from the transport connection</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34255.aspx</link><pubDate>Fri, 10 Aug 2007 11:28:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34255</guid><dc:creator>basilis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34255.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=34255</wfw:commentRss><description>&lt;P&gt;Καλησπέρα,&lt;/P&gt;
&lt;P&gt;Γράφω ένα πρόγραμμα που συνδέεται σε μια διεύθυνση&amp;nbsp;με TCP σύνδεση&amp;nbsp;και διαβάζει δεδομένα. Επειδή τα δεδομένα δεν είναι πάντα διαθέσιμα έχω timeout του streamreader στα 5sec. Δυστυχώς όμως κάποιες φορές όταν κάνω&amp;nbsp;.ReadLine() από τον StreamReader βλέπω το εξής&amp;nbsp;exception:&lt;/P&gt;
&lt;P&gt;{System.IO.IOException: Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. ---&amp;gt; System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)&lt;BR&gt;&amp;nbsp;&amp;nbsp; --- End of inner exception stack trace ---&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.IO.StreamReader.ReadBuffer()&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.IO.StreamReader.ReadLine()&lt;BR&gt;&amp;nbsp;&amp;nbsp; at MSNPlugin.connectMSN.readData() in D:\projects\connect.cs:line 121}&lt;/P&gt;
&lt;P&gt;Γιατί δεν κάνει απλά timeout το Read και πετάει exception? Αυτό το παθαίνω ακόμα και όταν βάλλω πολύ μικρό timeout πχ 1 ή 0,5 sec... Παρακάτω παραθέτω τον κώδικα:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TcpClient cl_Tcp = new TcpClient();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cl_Tcp.Connect(some_address, some_port);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cl_Tcp.Connected) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NetworkStream ns = cl_Tcp.GetStream();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamReader sr = new StreamReader(ns);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sr.BaseStream.ReadTimeout = 5000; //5 sec&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string dataRead = "";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool ping_alive = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (ping_alive)&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try { dataRead = sr.ReadLine(); } //EXCEPTION&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception exc) { ; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dataRead == "") { //de brike tpt na diabasei&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ping_alive = ping();//tsekarei an einai anixti i sindesi epistrefei true/false&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.Sleep(3000); //kimisou ligo mexri na brethoun dedomena gia diabasma&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessInput(dataRead); //epeksergasou ta dedomena&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataRead = "";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;Στόχος μου είναι να αποφύγω το exception δηλαδή να μην εμφανίζεται ούτε στο console. Υπάρχει τρόπος; &lt;/P&gt;
&lt;P&gt;Ευχαριστώ προκαταβολικά για την βοήθεια.&lt;/P&gt;</description></item></channel></rss>