C# Socket客户端发送数据,服务端仅前2字节正常其余为Null字节
Socket通信异常排查:仅前2字节正确,其余为Null字节
问题根源
问题出在客户端的数据复制环节:自定义的xMemUtils.MemCopy2函数未正确将_data的内容复制到发送缓冲区data的索引2起始位置。客户端输出的是_data的正确内容,但实际发送的data数组中,第3字节及以后的内容未被填充,导致服务端收到后续字节均为默认的0值。
修复方案
替换自定义内存复制函数为.NET内置的可靠实现,比如Buffer.BlockCopy或Array.Copy,避免自定义函数的潜在bug:
修改客户端Send函数中的复制代码:
// 替换原有的xMemUtils.MemCopy2调用 Buffer.BlockCopy(_data, 0, data, 2, _data.Length);
同时,stream.WriteAsync是异步方法,建议添加await确保数据发送完成后再执行后续操作,避免异步竞态问题:
await stream.WriteAsync(data, 0, wrLenBuf + 2);
验证逻辑
修改后,客户端发送缓冲区data会正确包含:
- 前2字节:小端序编码的数据包长度
- 索引2开始:完整的
_data内容
服务端接收时即可拿到完整的正确数据,不会再出现后续字节为0的情况。
额外检查(若坚持使用自定义复制函数)
排查xMemUtils.MemCopy2的实现:
- 确认参数传递是否正确(数组是引用类型,无需加
ref修饰符) - 检查源偏移、目标偏移、复制长度是否完全匹配需求
内容的提问来源于stack exchange,提问作者xYuri
相关产品推荐
相关产品推荐

