TCP-клиент — установить тайм-аут C# CF 3.5

У меня есть мобильный RF-терминал с Windows CE 6.0 CF 3.5, и мне нужно как можно быстрее отправить данные на мой сервер. Проблема в том, что соединение Wi-Fi недостаточно стабильно в месте использования. Я уменьшил потерю данных при повторной отправке, когда соединение прерывается по исключению. Но время для исключения составляет ~ 21 секунду, и это слишком долго для меня. Повторные подключения успешны (в основном), но мне нужно сократить время исключения или найти другой метод подключения.

Для получения данных у меня есть TCP-сервер в терминале. И вот у меня есть один поток с таймером, и после моего таймаута я закрываю клиент (TcpClient) и ловлю исключение из этого :-). Но я имею в виду, что этот метод не идеален.

Есть идеи?? Спасибо!

Ниже приведен мой код для подключения TCP-клиента.

    internal string TCPsend(string strMessage)
    {
        string exception = string.Empty;
        TcpClient client = null;
        try
        {
            client = new TcpClient(IPServer, PortServer);
            client.SendTimeout = 500;                        //no effect
            Stream stream = client.GetStream();
            StreamWriter strWriter = new StreamWriter(stream);
            strWriter.Write(strMessage);
            strWriter.Close();
        }
        catch (Exception ex)
        {
            exception = ex.ToString();
            utility.SaveExceptionLog("SendTCP A: " + ex.ToString());
        }
        finally
        {
            if (client != null)
            {
                client.Close();
            }
        }
        return exception;
    }

person zdenál    schedule 18.02.2014    source источник
comment
В коде, который вы разместили, большая часть времени будет потрачена на открытие и закрытие соединения. Гораздо эффективнее держать соединение открытым и использовать периодическое сообщение пульса для обнаружения разрыва сети при отсутствии другого трафика. так.   -  person tcarvin    schedule 19.02.2014


Ответы (1)


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

Вот ответ, в котором обсуждалась тривиальная проверка: Как лучше всего проверить подключение к Интернету с помощью .NET?

Это повлияет на общую производительность отправки, но должно сократить время ожидания.

person Rodion    schedule 18.02.2014