private void ReadMessageAync(IAsyncResult ar) { var sock = (Socket)ar.AsyncState; try { var countread = sock.EndReceive(ar); if (countread > 0) { var data = _Encoding.GetString(_readbuffer); if (new System.Text.RegularExpressions.Regex("websocket").IsMatch(data) && !_SocketHandshake) { WebSocketSecKey = new System.Text.RegularExpressions.Regex("Sec-WebSocket-Key: (.*)") .Match(data).Groups[1].Value.Trim(); const string eol = "\r\n"; // HTTP/1.1 defines the sequence CR LF as the end-of-line marker Byte[] response = Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" + eol + "Connection: Upgrade" + eol + "Upgrade: websocket" + eol + "Sec-WebSocket-Accept: " + Convert.ToBase64String(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes( WebSocketSecKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))) + eol + eol); _ClientSocket.Send(response); _SocketHandshake = true; _Sockettype = MySocketType.Websocket; } else { var message = MessageHandle.PrepareReceivedData(_readbuffer, _Encoding); if (!string.IsNullOrWhiteSpace(message.Text) && !string.IsNullOrWhiteSpace(message.FromId) && !string.IsNullOrWhiteSpace(message.ToId)) { ClientId = string.IsNullOrWhiteSpace(ClientId) ? message.FromId : ClientId; SendingMessageQueue.SendingMessages.Enqueue(message); } } } } catch (Exception e) { Console.WriteLine("Error In SendMessage Method : " + e.Message); } // sock.EndConnect(ar); WaitforData(); }