バージョン13(RFS 6455)で問題が発生している点を除いて、別の投稿で同じ質問が表示されます。誰もこのバージョンを使用してWebソケットサーバーを実装することに成功しましたか?私は見つけることができる他のすべての提案を試みましたが、どれも働いていませんでした。ウェブソケットサーバv13 RFC 6455クライアントがメッセージを受信しない
関連のポスト: Websocket server: onopen function on the web socket is never called。
クライアントは、クロム16 サーバー上のJavaScriptでC#のコンソールアプリケーションです。
私のサーバーは、クライアントのハンドシェイクを受信し、正常応答を送信することができますが、onMessageの/開く時]イベントは、クライアント上でトリガされていません。
それはほとんどの人々のための問題は、オンライン握手メッセージそのものであるが、私は見つけることができるすべての例は、-75または-76バージョンのためのものであるようです。
私はここの指示に従ってています: http://tools.ietf.org/html/rfc6455#page-39
ここで私は私のサーバーのハンドシェイク応答を初期化します。
handshake = "HTTP/1.1 101 Switching Protocols" + Environment.NewLine;
handshake += "Upgrade: websocket" + Environment.NewLine;
handshake += "Connection: Upgrade" + Environment.NewLine;
handshake += "Sec-WebSocket-Accept: ";
ここで、クライアントのハンドシェイクメッセージを受信し、応答キーを生成して返信します。
System.Text.ASCIIEncoding decoder = new System.Text.ASCIIEncoding();
string clientHandshake = decoder.GetString(receivedDataBuffer, 0, receivedDataBuffer.Length);
string[] clientHandshakeLines = clientHandshake.Split(new string[] { Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries);
foreach (string line in clientHandshakeLines)
{
if (line.Contains("Sec-WebSocket-Key:"))
{
handshake += ComputeWebSocketHandshakeSecurityHash09(line.Substring(line.IndexOf(":") + 2));
handshake += Environment.NewLine;
}
}
byte[] handshakeText = Encoding.ASCII.GetBytes(handshake);
byte[] serverHandshakeResponse = new byte[handshakeText.Length];
Array.Copy(handshakeText, serverHandshakeResponse, handshakeText.Length);
ConnectionSocket.BeginSend(serverHandshakeResponse, 0, serverHandshakeResponse.Length, 0, HandshakeFinished, null);
クライアント側のコードは次のようになります。
ws = new WebSocket("ws://localhost:8181/test")
ws.onopen = WSonOpen;
ws.onmessage = WSonMessage;
ws.onclose = WSonClose;
ws.onerror = WSonError;
サンプルクライアント握手
[0]: "GET /test HTTP/1.1"
[1]: "Upgrade: websocket"
[2]: "Connection: Upgrade"
[3]: "Host: localhost:8181"
[4]: "Origin: http://localhost:8080"
[5]: "Sec-WebSocket-Key: jKZrBlUEqqqstB+7wPES4A=="
[6]: "Sec-WebSocket-Version: 13"
サンプルサーバーの応答
[0]: "HTTP/1.1 101 Switching Protocols"
[1]: "Upgrade: websocket"
[2]: "Connection: Upgrade"
[3]: "Sec-WebSocket-Accept: mL2V6Yd+HNUHEKfUN6tf9s8EXjU="
すべてのヘルプは素晴らしいことです。ありがとう。あなたが投稿していなかった
返信いただきありがとうございます。 – Joy
それは私が必要としたものです。 Environment.NewLineは "\ r \ n"ですが、メッセージの最後には1つしかありませんでした。私は2番目を追加し、私のクライアントは今、サーバーからメッセージを取得しています。 WebSocketプロトコルに問題がある場合は、私は再び投稿します。再度、感謝します! – Joy