2011-05-31 49 views
6

पर डिस्कनेक्ट होने पर सर्वर पर टीसीपीक्लिएंट ऑटो रीकनेक्ट करने का सबसे अच्छा तरीका क्या है (उदा। सर्वर से ही)?टीसीपी क्लाइंट ऑटो-रिकनेक्ट

कोड मैं वर्तमान में उपयोग कर रहा हूँ है:

public void ClientWork() 
{ 
     TcpClient client = new TcpClient(); 

     try 
     { 
      try 
      { 
       client.Connect(ip, port); 
      } 
      catch(Exception ex) 
      { 
       logger.ErrorFormat("client.Connect: {0}", ex.Message); 
       return false; 
      } 

      NetworkStream ns = client.GetStream(); 
      byte[] buff; 

      while (__bRunning) 
      { 
       buff = new byte[1000]; 
       ns.Read(buff, 0, 1000); 

       string line = System.Text.Encoding.Default.GetString(buff); 
      } 

      //ns.Close(); 
      client.Close(); 
     } 
     catch(Exception e) 
     { 
      //Reconnect? 
      client.Close(); 
      client = null; 

      return false; 
     } 
} 

मैं सी # नेट

उत्तर

1

उपयोग कर रहा हूँ वहाँ कोई घटनाओं टूटी हुई कनेक्शन का नोटिफिकेशन प्राप्त करने के लिए उपलब्ध है।

2 संभव समाधान हो सकता है।

  1. मतदान। आपके पास अलग धागा है जो विभिन्न धागे में लगातार सॉकेट को पोल करने का प्रयास करता है। देखें Instantly detect client disconnection from server socket

  2. आप सॉकेट या इंटरफ़ेस जो सॉकेट उपयोग कर रहा है, तो आप पढ़ने के लिए try..catch कर सकते हैं और तरीकों लिखने या पढ़ने के रैपर के लिए try..catch और तरीकों लिख सकते हैं और जब वहाँ पर कम स्तर पर नियंत्रण है, तो कोई अपवाद है जिसे आप पुनः कनेक्ट कर सकते हैं और पढ़ने और लिखने का प्रयास कर सकते हैं।

+0

ग्राहक पक्ष पर मतदान? – Kai

+0

हां। वर्तमान सॉकेट –

+0

के साथ क्लाइंट साइड पर मतदान करना चाहिए जिसका मतलब है कि मैं खोलने वाले प्रत्येक कनेक्शन के लिए एक थ्रेड शुरू करता हूं जो कनेक्शन के अभी भी उपलब्ध होने पर हर 5 सेकंड जांचता है? – Kai

संबंधित मुद्दे