Вы получаете исключение из handler.EndReceive()
.Хотя по общему признанию неясно , почему вы получаете конкретное исключение, которое вы упомянули, при вводе в действие этот код будет генерировать исключения каждый раз, когда возникает проблема сетевого взаимодействия (что является распространенным явлением).
Следовательно, вам, вероятно, следует все равно попытаться / поймать вызов на EndReceive()
.Подумайте о том, что будет делать ваш код в случае сбоя соединения, или когда сервер умирает или что-то в этом роде.
Тогда вы можете приступить к диагностике конкретных проблем.Одна важная вещь, которую вы не указали: вы получаете эту ошибку только изредка или воспроизводите ее постоянно ?Если это первое, то это могут быть просто колебания интернет-соединения.Ваше программное обеспечение должно быть в состоянии справиться с этим.Если это последнее, то я думаю, что это звучит как проблема на сервере.Когда вы звоните BeginReceive()
, ваша система начнет ожидать чего-то от сервера;если это «что-то» означает, что оно получило данные, то EndReceive()
выполнится успешно, но если это «что-то» означает, что сервер закрыл соединение , ваш обратный вызов все равно будет вызван, а затем EndReceive()
выбросит соответствующий SocketException
.Это сделано специально, потому что нет другого способа сообщить вашему коду, что сервер закрыл соединение.
РЕДАКТИРОВАТЬ: Похоже, ваш серверный код требует такой же обработки ошибок: еговызов EndReceive()
в равной степени склонен вызывать исключение, если клиент закрывает соединение.(Я знаю, что у вас есть попытка / ловушка вокруг всей большой вещи, но она выводит MessageBox ..., который не будет хорошо работать на сервере, если вы не хотите, чтобы кто-то сидел там все время, нажимаяна все кнопки ОК ...)