【发布时间】:2011-07-07 14:57:00
【问题描述】:
现在我有一个由客户端和服务器组成的通信基础设施。
客户端使用标准 TCP 套接字连接到服务器。
我的消息结构如下:
4 bytes -- Message size
n bytes -- Message
4 bytes -- CRC32 checksum
其中一个要求是消息必须通过连接另一端的 CRC32 检查才能有效,无论是客户端还是服务器都以相同的方式处理消息。
如果消息未通过 CRC32 校验,则断开连接并建立新连接。
我的问题是为什么我会随机出现 CRC32 失败?
没有明显的原因,即使客户端和服务器在同一台机器上使用环回地址 (127.0.0.1)。
我认为即使我为恶意第三方或其他什么情况编写了故障保护程序,我也永远不会在测试期间看到断开连接。
【问题讨论】:
-
我最好的猜测是您的校验和代码中存在错误。你能给我们展示一些最小的示例代码吗?
-
我假设在读/写中存在错误(例如,假设
recv总是返回所需的确切数据长度,类似于send)或代码检查中的错误/创建 CRC。发布一些代码将大大有助于澄清这一点并帮助我们帮助您。
标签: sockets data-transfer