У меня есть сервер, который я написал, используя асинхронные сокеты. В части, которая принимает новые подключения, у меня возникает проблема, когда некоторые пользователи говорят, что иногда они получают эту ошибку на сервере, когда клиент пытается повторно подключиться к серверу:
"Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, потому что подключенный хост не ответил"
После возникновения этой ошибки сервер перестает работать, и новые клиенты не могут подключиться, пока я физически не закрою серверную программу и не запустлю ее снова. Так что мне делать, когда я получаю эту ошибку? Я попытался по существу перезапустить сервер в своем коде, закрыв сокет (listener.Close ()), а затем вызвав тот же код, который я использовал для создания и привязки к сокету в начале, но затем я получаю сообщение об ошибке, говорящее, что я могу не привязывать к тому же порту снова.
Итак, два вопроса. Во-первых, как правильно обработать эту ошибку и не допустить, чтобы она по существу убила мой сервер? Далее, как правильно перезапустить сервер через мой код? В этом случае просто не работает .close () для слушателя, а затем запускает его снова.
Спасибо
Вот код, принимающий запрос на соединение
Закрытый запрос Sub connection (ByVal ar As IAsyncResult)
Try
Dim thisListener As Socket = CType(ar.AsyncState, Socket)
Dim handler As Socket = thisListener.EndAccept(ar)
Dim remoteEndPoint As IPEndPoint
remoteEndPoint = handler.RemoteEndPoint
thisListener.Listen(10)
thisListener.BeginAccept(New AsyncCallback(AddressOf connectionRequest), thisListener)
thisListener.NoDelay = True
thisListener.Ttl = 32
Dim state As New StateObject
state.workSocket = handler
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, New AsyncCallback(AddressOf dataArrival), state)
handler.NoDelay = True
Catch ex As Exception
End Try
End Sub