资讯详情

(已解决)zynq下lwip协议栈使用tcp作为服务器接收大量数据长度接收正常,校验和异常

📅 2026/10/28 10:20:33 | 华诺云谱 👁 阅读
(已解决)zynq下lwip协议栈使用tcp作为服务器接收大量数据长度接收正常,校验和异常
问题zynq作为服务器tcp建链后接收来自发送端的大量数据时不断进入回调函数accept_callback中tcp的分包机制应将每包的p payload数据memcpy到全局变量处缓存等接收全后跳出ifp进行处理。现象流程中加入memcpy消耗时间太久导致每包tcp接收的数据递增缓慢长时间进不到结束分支ifp下但是设置断点能进接收回调函数没有达到tcp快速传输效果。解决最终定位于mss配置问题当前编译版本为vivado2017.41—进入mss配置内的lwip141协议栈2—进入tcp_options选项3—tcp_wnd default默认2048但是定义是integer为了提速就想当然改成65535结果事与愿违出现这个问题后来改为2048恢复正常。引申问题速度正常后但是本地接收端对大包数据校验和不一致发送端对16MB数据按字节累加做了校验和接收端同样的计算方法怀疑是tcp分包黏包了或者是包接收错乱包。虽然长度一致但是接收到大量数据后检验收到的数据是否正确校验和不对就说明接收到的数据不对。引申问题解决问题依旧定位system.mss设置上pubf_pool_bufsize 默认1700改成4096接收数据校验和正常但是是否影响其他性能有待后续。上位机Tcp 客户端“发送按钮 ”直接粘即可c#private void TCP发送_Click(object sender, EventArgs e){try{TcpClient tcpClient new TcpClient();tcpClient.Connect(IPAddress.Parse(“192.168.1.1”), 5000);NetworkStream NTWStream tcpClient.GetStream(); NTWStream.Write(g_ucSendBin, 0, (int)g_uiSendBinLength); NTWStream.Close(); tcpClient.Close(); } catch (Exception ex) { MessageBox.Show(String.Format(发生错误消息{0}, ex.Message), 错误, MessageBoxButtons.OK, MessageBoxIcon.Error); }}
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑