private void ReceiveCallback(IAsyncResult result) { var connection = (ConnectionInfo)result.AsyncState; try { int bytesRead = connection.Socket.EndReceive(result); if (0 != bytesRead) { Console.WriteLine("Получен запрос от {0}:", connection.Socket.RemoteEndPoint); String buffer = Encoding.Unicode.GetString(connection.Buffer); buffer = buffer.Substring(0, buffer.IndexOf('\0')); Request req = Serializator.DeserializeRequest(buffer); Console.WriteLine("Запрос поставлен в очередь на обработку..."); TranslateRequest(req, connection); connection.Buffer = new byte[512]; Console.WriteLine("Продолжаю приём от {0}...", connection.Socket.RemoteEndPoint); connection.Socket.BeginReceive(connection.Buffer, 0, connection.Buffer.Length, SocketFlags.None, ReceiveCallback, connection); } } catch (SocketException exc) { CloseConnection(connection); Console.WriteLine("Socket exception: " + exc.SocketErrorCode); } catch (Exception exc) { CloseConnection(connection); if (exc is ObjectDisposedException) { Console.WriteLine("Клиент отсоединен"); } else { Console.WriteLine("Exception: " + exc.Message); } } }