2014-01-23 3 views
0

У нас есть устройство, которое принимает сообщения ascii по беспроводной сети, а затем отвечает значением, и я успешно реализовал это в решении Windows Forms 2010 в C#.Повторное использование TcpClient в C#

Я написал это как тестовое решение для подтверждения технологии, и фактические вызовы устройства будут выполнены на переносном устройстве Motorola MC55.

Теперь я написал дополнительное тестовое решение в Visual Studio 2008 и установил его на устройство, но подключение к TcpClient занимает около 30 секунд каждый раз при вызове на мобильном устройстве, где, как и в решении Windows, почти мгновенное.

Это слишком медленно, поэтому я начал смотреть на повторное использование TcpClient, но не имел никакого успеха и задавался вопросом, есть ли у кого-либо другие подобные проблемы и спросить, как они обошли его или кто-нибудь может предложить какие-либо советы о том, как повторно использовать TcpClient, поэтому мне не нужно создавать новый каждый раз, когда я хочу позвонить.

Код для подключения показан ниже ...

 public static string GetValueFromDevice(string deviceIPAddress, int devicePort, string messageSentToDevice) 
    { 
     string returnValue = ""; 

     try 
     { 
      TcpClient client = new TcpClient(deviceIPAddress, devicePort); 

      byte[] inData = System.Text.Encoding.ASCII.GetBytes(messageSentToDevice); 
      NetworkStream stream = client.GetStream(); 
      stream.Write(inData, 0, inData.Length); 

      byte[] outData = new Byte[256]; 
      int bytes = stream.Read(outData, 0, outData.Length); 
      returnValue = System.Text.Encoding.ASCII.GetString(outData, 0, bytes); 

      stream.Close(); 
      client.Close(); 
     } 
     catch (Exception ex) 
     { 
      returnValue = ex.Message; 
     } 

     return returnValue; 
    } 

ответ

1

Вы можете оставить TcpClient открытым до тех пор, как вам нравится. Сохраните переменные client и stream как часть класса (а не в функции) и не вызывайте Close(), пока вы не закончите.

+0

Или, может быть, статический клиент, хотя я тоже предпочел бы член экземпляра, если он не будет постоянно построен/уничтожен. –

1

Вы можете сохранить и повторно использовать клиент и поток и поместить код в отдельный поток.

Но, я не верю, что для инициализации потребуется около 30 секунд. Я вижу, что медленный init для TCP-клиента при подключении ActiveSync, но если у вас есть только беспроводное соединение, он должен немедленно начать.

Так что проверьте настройки сети. После первого развертывания и отладки сеанса VS с использованием Active Sync Visual Studio может повторно использовать определенный беспроводной IP-адрес и запускает последующие сеансы развертывания/отладки через беспроводной TCP/IP (если ActiveSync на ПК настроен на разрешение соединений данных во время AS соединения).

+0

Спасибо за ваше предложение Josef. Я оставил устройство подключенным после загрузки CAB-файла и попытался отключить его перед запуском моего приложения, но я не имел большого значения. Стоит иметь в виду будущее, поэтому, спасибо. – Karl