C # асинхронный прием вызывает общесистемный сбой сети! - PullRequest
1 голос
/ 02 февраля 2011

У меня есть очень странная ошибка, о которой я очень мало знаю, поэтому, пожалуйста, потерпите меня.

У меня есть розетка, соединяющаяся с аппаратным обеспечением.Я отправляю синхронно, но получаю асинхронно.

Я отправляю данные по следующему коду:

_dicSockets[lclIPEndPoint].Send(lclBytesSent, lclBytesSent.Length, SocketFlags.None);

и получаю по следующему коду:

protected virtual void receiveCallback(IAsyncResult ar)
        {
            PFDoReceiveDataArgs receiveData = (PFDoReceiveDataArgs)ar.AsyncState;
            Socket lclSocket = receiveData.MySocket;
            etc...

Эта схема прекрасно работает, когда оборудование быстро реагирует, в течение10 секунд.Однако сумасшедшие проблемы возникают, когда аппаратному обеспечению требуется больше времени (около 5 минут) для ответа.В течение этого времени существует поток, который находится в цикле while, проверяя, получила ли команда ответ или нет.

Я знаю, что аппаратное обеспечение работает и работает в это время.Я отправляю команду, и через 5 минут приходит ответ.4 из 5 раз проблем нет, все работает как положено.Та же команда, та же часть оборудования, все то же самое ...

1 из 5 раз происходит системный сбой сети, когда теряется мое интернет-соединение!

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

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Может не иметь непосредственного отношения к проблеме, но я бы также удалил экземпляр сокета до того, как элемент управления покинет контекст метода receiveCallback.

0 голосов
/ 03 февраля 2011

Если сомневаетесь, прослушивайте сеть.Несколько лет назад у меня была проблема, когда компьютер в сети передавал искаженные пакеты и периодически отключал наш основной коммутатор Cisco.Таинственное аппаратное обеспечение, с которым вы разговариваете, может передавать какой-то ужасный трафик 1 из 5 раз.

Я обнаружил проблему, понюхав сеть, пока что-то пошло не так, и смог сузить проблему.

...