2013-10-01 6 views
1

Я написал код для прослушивания данных на конкретном порту в режиме TCP. Теперь проблема в том, что приведенный ниже код получает некоторые данные из пульта дистанционного управления и через некоторое время он не получает ничегоTCPClient - перестает получать данные через некоторое время

меня проверить Wireshark и данные поступают через там у меня есть проверить TCPView, порт (2- 3 входа одного и того же порта) открыто с приложением, но несколько состояний порта остаются «ESTABLISHED», а один порт говорит «LISTENING»

Если я проверяю прокрутку для данных о пропущенных данных, я обнаружил, что удаленный Пара IP-портов указывается как «ESTABLISHED» в TCPView, но ничего не может записать в файле журнала

Мой вопрос: почему данные не получены в моей заявке. Что-то не так в коде? Я пробовал каждый вариант, который может предоставить Google, но нет никакой удачи.

 TcpListener tcpListenerDeviceResponse = new TcpListener(new IPEndPoint(IPAddress.Parse(localIP), 6005)); 
     tcpListenerDeviceResponse.Start(); 
     while (true) 
     { 
      using (TcpClient client = tcpListenerDeviceResponse.AcceptTcpClient()) 
      { 
       // Get a stream object for reading and writing 
       using (NetworkStream stream = client.GetStream()) 
       { 
        Socket skSource = client.Client; 
        int i; 
        var data2 = new byte[client.ReceiveBufferSize]; 
        // Loop to receive all the data sent by the client. 
        while ((i = stream.Read(data2, 0, data2.Length)) != 0) 
        { 
         // Translate data bytes to a ASCII string. 
         string strResponse = System.Text.Encoding.ASCII.GetString(data2, 0, i); 
         // Insert the data in log text file 
         // process data 
        } 
        stream.Close(); 
       } 
       // Shutdown and end connection 
       client.Close(); 
      } 
     } 
     tcpListenerDeviceResponse.Stop(); 
+0

Не доверяйте протоколу регистрации, чтобы быть надежным. Используйте отладчик. –

ответ

0

Один из причин может быть тайм-аутом!

Предполагая, что передающий сокет не отправит данные больше, чем тайм-аут приемного сокета, это приведет к ошибке таймаута и сломает цикл while и закройте сокет.

This Ссылка MSDN может вам помочь!

Кроме того, я предлагаю вам закрыть розетку, только если она нарушает while по другим причинам, кроме таймаута. Если время ожидания, повторите чтение.

Смежные вопросы