c# - HTTP 未解析的 ping - TCP 服务器
问题描述
每隔 30 秒,我的 TCP 服务器会从我的 HTTP 客户端接收一个数据包,它们都是用 c# 编码的。这是控制台信息:
94:39:38 - [ERROR] Unhandeled: ???
14:39:38 - [ERROR] fin: True | opcode: 9 | msglen: 0 | mask: True | arrayLength: 6
14:39:38 - [ERROR] hex: 8980d6bb0d39
14:39:38 - [ERROR] cast: System.Byte[]
14:40:08 - [ERROR] Unhandeled: ??????
14:40:08 - [ERROR] fin: True | opcode: 9 | msglen: 0 | mask: True | arrayLength: 6
14:40:08 - [ERROR] hex: 8980ad8fd4e3
14:40:08 - [ERROR] cast: System.Byte[]
14:40:38 - [ERROR] Unhandeled: ???3
k
14:40:38 - [ERROR] fin: True | opcode: 9 | msglen: 0 | mask: True | arrayLength: 6
14:40:38 - [ERROR] hex: 8980e3330a6b
14:40:38 - [ERROR] cast: System.Byte[]
14:41:08 - [ERROR] Unhandeled: ??]???
14:41:08 - [ERROR] fin: True | opcode: 9 | msglen: 0 | mask: True | arrayLength: 6
14:41:08 - [ERROR] hex: 89805da8aec9
14:41:08 - [ERROR] cast: System.Byte[]
14:41:38 - [ERROR] Unhandeled: ?????
14:41:38 - [ERROR] fin: True | opcode: 9 | msglen: 0 | mask: True | arrayLength: 6
14:41:38 - [ERROR] hex: 8980bea007ed
14:41:38 - [ERROR] cast: System.Byte[]
14:42:08 - [ERROR] Unhandeled: ???|?_
14:42:08 - [ERROR] fin: True | opcode: 9 | msglen: 0 | mask: True | arrayLength: 6
14:42:08 - [ERROR] hex: 8980b67cd35f
14:42:08 - [ERROR] cast: System.Byte[]
此日志由以下代码生成:
public void process(byte[] Data) {
bool fin = (Data[0] & 0b10000000) != 0,
mask = (Data[1] & 0b10000000) != 0;
int opcode = Data[0] & 0b00001111, // expecting 1 - text message
msglen = Data[1] - 128, // & 0111 1111
offset = 2;
if (msglen == 0)
{
log.Error($"Unhandeled: {Encoding.UTF8.GetString(Data)}");
log.Error($"fin: {fin} | opcode: {opcode} | msglen: {msglen} | mask: {mask} | arrayLength: {Data.Length}");
log.Error($"hex: {ByteArrayToHexString(Data)}");
log.Error($"cast: {Data}");
return null;
}
}
在其中几个可能的 ping 之后,TCP 服务器将无法解析客户端发送的其他数据包,只能解析这些 ping。在这些 ping 中的任何一个之前,它最终都能够很好地解析数据包,但它不再是了。有谁知道如何防止这些假定的 ping 或如何处理它们,以便它们不会冻结它不会解析我的任何其他请求?
编辑:它还会停止处理 ping,直到创建新连接。该连接再次工作,直到几次 ping。
解决方案
推荐阅读
- html - 引导药丸问题
- react-native - 在 Tab Navigator 的屏幕中未使用 Modal 渲染屏幕
- javascript - Highcharts 3D漏斗阵列格式
- python - 如何在此数据框中组合这些列?
- flutter - Flutter/Dart - 在延迟或中断之前打开视图
- spring-boot - 带有 JAXB 生成的类的招摇 2
- python - 从字符串中的某个字符中删除一行中的多次出现
- django - RuntimeError:线程“ThreadPoolExecutor-0_0”中没有当前事件循环
- powershell - 在脚本中捕获来自 Get-NetRoute 的输出时遇到问题
- linux - Linux 上的二进制可执行文件在哪里?