Create "Hello World" WebSocket の例を見ていましたが、これを適応させて、コンソールに入力された WebSocket 経由でカスタム メッセージを送信しようとしましたが、コードを理解するのにいくつかの問題があります。
私の質問は、上でリンクした回答に基づいて正しく送信できるように、自分のメッセージをエンコードする正しい方法は何ですか
client.Send(my-own-message);
Create "Hello World" WebSocket の例を見ていましたが、これを適応させて、コンソールに入力された WebSocket 経由でカスタム メッセージを送信しようとしましたが、コードを理解するのにいくつかの問題があります。
私の質問は、上でリンクした回答に基づいて正しく送信できるように、自分のメッセージをエンコードする正しい方法は何ですか
client.Send(my-own-message);
あなたは本当にソースに行くべきです。Websocket の仕様は実際には非常に読みやすく、メッセージをどのようにフォーマットする必要があるかを正確に示しています。
要するに、接続を確立する最初のハンドシェイクが既に完了していると仮定すると、Websocket フレームに含まれるデータは次のとおりです。
0x81
オペコード、メッセージが UTF-8 テキストとしてフォーマットされている場合、およびメッセージがバイナリ データである場合は値を含む 1 バイト0x82
(いくつかのブラウザは後者をサポートしていないことに注意してください)i
の th バイトと一緒に XOR する必要があります)。i%4
これを行うと、UTF8 テキストまたは未加工のバイナリ データを含む有効な Websocket フレームが作成されます。ご覧のとおり、いくつかの手順が必要ですが、それぞれは比較的簡単です。(繰り返しになりますが、リンク先の RFC を確認してください。これはすべて記憶から書いたものであり、多少の不正確さがある可能性があります)
したがって、まずConsole.Read()
1 つの文字のみを読み取り、この文字を表す int を返します。
メッセージを送信したい場合は、おそらくConsole.ReadLine()
文字列を返すものを使用したいと思うでしょう。
string msg = Console.ReadLine();
client.Send(GetBytes(msg));
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
メートル単位の場合:
byte[] ascii = System.Text.Encoding.ASCII.GetBytes (msg);
byte[] utf8 = System.Text.Encoding.UTF8.GetBytes (msg);