public async void Handshaking(TcpClient client) { NetworkStream networkStream = client.GetStream(); byte[] bufferReceive = new byte[client.Available]; await networkStream.ReadAsync(bufferReceive, 0, bufferReceive.Length); string[] request = Encoding.ASCII.GetString(bufferReceive).Split(Environment.NewLine); Dictionary <string, string> headers = new Dictionary <string, string>(); headers.Add("method", request[0]); for (int i = 1; i < request.Length - 2; i++) { if (request[i].Contains(':')) { Console.WriteLine(request[i]); string[] values = request[i].Split(':'); headers.Add(values[0].ToLower(), values[1].TrimStart()); } } if (headers["method"].StartsWith("GET")) { string response = "HTTP/1.1 101 Switching Protocols" + Environment.NewLine; response += "Connection: Upgrade" + Environment.NewLine; response += "Upgrade: websocket" + Environment.NewLine; byte[] hash = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(headers["Sec-WebSocket-Key"] + _shaKey)); response += "Sec-WebSocket-Accept: " + Convert.ToBase64String(hash); response += Environment.NewLine + Environment.NewLine; Console.WriteLine(); Console.WriteLine(response); byte[] bufferSend = Encoding.UTF8.GetBytes(response); await networkStream.WriteAsync(bufferSend, 0, bufferSend.Length); } WsClient wsClient = new WsClient(client); _server.OnClientConnect(wsClient); }