Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

System.IO.IOException: Unable to read data from the transport connection

Îåêßíçóå áðü ôï ìÝëïò basilis. Τελευταία δημοσίευση από το μέλος basilis στις 10-08-2007, 04:28. Υπάρχουν 0 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-08-2007, 04:28 34255

    System.IO.IOException: Unable to read data from the transport connection

    Καλησπέρα,

    Γράφω ένα πρόγραμμα που συνδέεται σε μια διεύθυνση με TCP σύνδεση και διαβάζει δεδομένα. Επειδή τα δεδομένα δεν είναι πάντα διαθέσιμα έχω timeout του streamreader στα 5sec. Δυστυχώς όμως κάποιες φορές όταν κάνω .ReadLine() από τον StreamReader βλέπω το εξής exception:

    {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. ---> 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
       at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
       at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
       --- End of inner exception stack trace ---
       at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
       at System.IO.StreamReader.ReadBuffer()
       at System.IO.StreamReader.ReadLine()
       at MSNPlugin.connectMSN.readData() in D:\projects\connect.cs:line 121}

    Γιατί δεν κάνει απλά timeout το Read και πετάει exception? Αυτό το παθαίνω ακόμα και όταν βάλλω πολύ μικρό timeout πχ 1 ή 0,5 sec... Παρακάτω παραθέτω τον κώδικα:

        TcpClient cl_Tcp = new TcpClient();
        cl_Tcp.Connect(some_address, some_port);
        if (cl_Tcp.Connected) {
            NetworkStream ns = cl_Tcp.GetStream();
            StreamReader sr = new StreamReader(ns);
            sr.BaseStream.ReadTimeout = 5000; //5 sec
            string dataRead = "";
            bool ping_alive = true;
            while (ping_alive)  {
                try { dataRead = sr.ReadLine(); } //EXCEPTION
                catch (Exception exc) { ; }
                if (dataRead == "") { //de brike tpt na diabasei
                    ping_alive = ping();//tsekarei an einai anixti i sindesi epistrefei true/false
                    Thread.Sleep(3000); //kimisou ligo mexri na brethoun dedomena gia diabasma
                    continue;
                }
                ProcessInput(dataRead); //epeksergasou ta dedomena
                dataRead = "";
            }
        }

    Στόχος μου είναι να αποφύγω το exception δηλαδή να μην εμφανίζεται ούτε στο console. Υπάρχει τρόπος;

    Ευχαριστώ προκαταβολικά για την βοήθεια.

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems