VB.NET 3.5 SocketException при развертывании, но не на компьютере разработчика - PullRequest
2 голосов
/ 23 октября 2009

Я написал асинхронный UDP-клиент для связи с сервером в моей компании. Когда я бегу на своей машине разработчика, все хорошо. При развертывании на другой машине я получаю исключение сокета в EndReceive при первой отправке данных через сокет. Мой dev box - это Win7, и я развернул его как на машине с XP SP3, так и на машине с Server 2003 R2. Ниже приведен код получения:

Private Sub ReceiveCallback(ByVal ar As IAsyncResult)
    Try
        ' Retrieve the state object and the client socket 
         from the asynchronous state object.'

        Dim state As StateObj = CType(ar.AsyncState, StateObj)
        Dim client As Socket = state.sockArg

        ' Read data from the remote device.'
        Dim bytesRead As Integer
        receiveDone.WaitOne(Timeout.Infinite)

        bytesRead = client.EndReceive(ar)
        If bytesRead > 0 Then
            Dim s As String = Encoding.ASCII.GetString(state.buffer, 0, bytesRead)
            parsedata(s)
        End If
    Catch SockEx As SocketException
        mlog.Error(String.Format("ID={1} {0} SocketError={2}", SockEx.Message, ID.ToString, SockEx.SocketErrorCode.ToString), SockEx)
    Catch ox As System.ObjectDisposedException
        mlog.Warn(String.Format("Object Disposed ID={0}", ID.ToString))
    Catch ex As Exception
        mlog.Error(String.Format("{1} ID={0}", ID.ToString, ex.Message), ex)
    End Try
End Sub 'ReceiveCallback

Исключение, которое я получаю:

System.Net.Sockets.SocketException: операция ввода-вывода была прервана из-за выхода из потока или запроса приложения в System.Net.Sockets.Socket.EndReceive (IAsyncResult asyncResult) в RTSPc.Connection.ReceiveCallback (IAsyncResult ar)

Исключение Socket - это операция Неправильно

1 Ответ

5 голосов
/ 23 октября 2009

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

Смотрите эту запись в моем блоге по этому поводу: http://www.lenholgate.com/blog/2008/02/major-vista-overlapped-io-change.html

Теперь, почему у вас возникает проблема в XP - это реальный вопрос, и для ответа на него нам, вероятно, потребуется немного больше узнать о том, как вы отправляете свои перекрывающиеся запросы ввода-вывода и откуда. У вас есть какие-то темы? Они выдают какие-либо запросы ввода / вывода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...