You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:05:20