c# - 通过 C# Socket 发送 WebSocket 消息

标签 c# sockets websocket

我在看 Create "Hello World" WebSocket example并开始尝试调整它以通过在控制台输入的 WebSocket 发送自定义消息,但我在理解代码时遇到了一些问题。

我的问题是什么是对我自己的消息进行编码的正确方法,以便它可以根据我上面链接的答案正确发送

client.Send(my-own-message);

最佳答案

你真的应该go to the source . Websocket 规范实际上非常易于阅读,它告诉您应该如何格式化消息。

但简而言之,假设您已经完成了建立连接的初始握手,以下是 Websocket 框架应包含的数据:

  • 一个操作码,如果消息的格式为 UTF-8 文本,则值为 0x81 的单个字节,如果消息为二进制数据,则为 0x82(请注意,一些浏览器不支持后者)
  • 一个或多个字节的长度字段,描述消息的长度。第一个字节的最高有效位必须在客户端发送的消息上设置(它表示负载被屏蔽,这必须在客户端到服务器的消息上完成,并且必须完成在服务器到客户端的消息上)。长度字段可以具有可变长度:如果长度低于 126 字节,则将其简单地编码为单个字节(保留最高有效位以指示屏蔽,如前所述)。如果长度小于 65KB,则第一个字节的 7 个可用位取值 126,随后的两个字节将长度作为 16 位整数包含。否则,第一个字节的7位取值127,随后的8个字节包含64位整数的长度。
  • 一个 4 字节的掩码 key ,必须为每条消息随机选择
  • 最后,您要发送的实际消息。这必须使用掩蔽键来掩蔽,只需将每个字节与掩蔽键的一个字节进行异或运算即可。 (消息的字节 i 应该与屏蔽 key 的第 i%4 字节一起进行异或)。

这样做,您就创建了一个有效的 websocket 框架,其中包含 UTF8 文本或原始二进制数据。如您所见,其中涉及几个步骤,但每个步骤都相对简单。 (再一次,请检查我链接到的 RFC,因为我只是凭内存写下所有这些,所以可能会有一些小的错误)

关于c# - 通过 C# Socket 发送 WebSocket 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540621/

相关文章:

php - 设置 PHP Websocket 服务器究竟需要什么?

java - Spring boot 在@MessageMapping中获取域名

c# - '这是 'bait' 。您可能需要添加其中一个 SQLitePCLRaw.bundle_* nuget 包

c# - 处理未处理的回车键 c#

java - javax.servlet.Filter 会拦截 Websocket 消息吗? (Java 服务小程序 API)

c - 当我使用 '' 关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收 "control-c"

java - 关闭ServerSocket的正确方法

c# - 将 PDF 嵌入到 WPF 应用程序中

c# - 在 asp .net 中返回上一页的超链接

python - 有没有办法一次收听多个 python 套接字