我正在查看创建“Hello World”WebSocket 示例并开始尝试对其进行调整以通过在控制台输入的 WebSocket 发送自定义消息,但我在理解代码时遇到了一些问题。
我的问题是对我自己的消息进行编码以便可以根据我上面链接的答案正确发送的正确方法是什么
client.Send(my-own-message);
我正在查看创建“Hello World”WebSocket 示例并开始尝试对其进行调整以通过在控制台输入的 WebSocket 发送自定义消息,但我在理解代码时遇到了一些问题。
我的问题是对我自己的消息进行编码以便可以根据我上面链接的答案正确发送的正确方法是什么
client.Send(my-own-message);
所以首先Console.Read()
只读取一个字符并返回代表这个字符的 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);
你真的应该去源头。Websocket 规范实际上非常易于阅读,它准确地告诉您应该如何格式化您的消息。
但简而言之,假设您已经完成了建立连接的初始握手,以下是 Websocket 框架应包含的数据:
0x81
一个操作码,如果消息被格式化为 UTF-8 文本,并且0x82
消息是二进制数据(请注意,一些浏览器不支持后者) ,则为带有值的单个字节i
消息的字节应该与i%4
掩码键的第 th 字节一起异或)。这样做,您就创建了一个有效的 websocket 框架,其中包含 UTF8 文本或原始二进制数据。如您所见,其中涉及几个步骤,但每个步骤都相对简单。(再一次,请检查我链接到的 RFC,因为我只是从内存中写了所有这些,所以可能会有一些不准确的地方)