完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好
我一定是在下面的函数中做错了什么,以在 tcp 套接字上传输缓冲区。如果最多传输 4096 个字节,则该函数可以正常工作。如果 len 大于该值,则 nx_tcp_socket_send 失败。如何使用 Netx 正确流式传输缓冲区? void TCP_Send(void *buf, uint32_t len) { UINT 返回; NX_PACKET *发送数据包; nx_packet_allocate(&AppPool,&send_packet,NX_TCP_PACKET,NX_WAIT_FOREVER); nx_packet_data_append(send_packet,buf,len,&AppPool,NX_WAIT_FOREVER); ret = nx_tcp_socket_send(&TCPSocket, send_packet, NX_WAIT_FOREVER); 如果(ret)nx_packet_release(send_packet); } |
|
相关推荐
1个回答
|
|
如 MS 文档所述:大于有效负载大小的应用程序数据需要将多个数据包链接在一起。当用用户数据填充数据包时,应用程序应使用服务nx_packet_data_append。
并且明确表示:在一个数据包不足以容纳用户数据的情况下,分配额外的数据包来存储用户数据。 所以在调用 nx_packet_data_append之前,我们必须有需要的包数。 之后调用nx_tcp_socket_send()并且此函数还将分配额外的数据包以进行分段。. 所以在调用 nx_packet_data_append 之前,我们必须有需要的包数。 让我们通过使用 Nx_TCP_Echo_Server 应用程序且不更改任何 Pool 参数的示例来解释这一点。 - 示例 1:传输 4000 个字节: //在调用nx_packet_data_append之前,AppPool->nx_packet_pool_available = 4 ret = nx_packet_data_append (send_packet,buf,len,&AppPool,NX_WAIT_FOREVER); //len = 4000 数据包中的可用字节数是 1480 所以我们需要再分配 2 个数据包 实际上 1480 + 1480*2 = 4440 > 4000 //所以调用nx_packet_data_append后 AppPool->nx_packet_pool_available = 2 ret = nx_tcp_socket_send (&TCPSocket, send_packet, NX_WAIT_FOREVER); // -> 确定 //len = 4000 和 tcp_window = 1460 所以要进行分段,我们需要再分配 2 个数据包,实际上 1460 + 1460*2 = 4380 > 4000 //所以调用nx_tcp_socket_send后AppPool->nx_packet_pool_available = 0 - 示例 2:传输 7000 个字节: //在调用nx_packet_data_append AppPool->nx_packet_pool_available = 4之前 ret = nx_packet_data_append (send_packet,buf,len,&AppPool,NX_WAIT_FOREVER); //len = 7000 数据包中的可用字节数为 1480 所以我们需要再分配 4 个数据包 实际上 1480 + 1480*4 = 7400 > 7000 //所以调用nx_packet_data_append后AppPool->nx_packet_pool_available = 0 -> 所以不能调用nx_tcp_socket_send做分片。 ret = nx_tcp_socket_send (&TCPSocket, send_packet, NX_WAIT_FOREVER); // -> 击倒 简而言之,最大负载是 tcp_window 的倍数。因此,您可以调整您的分配以适应任何大小,一旦达到所需的数据大小,传输将自动完成。在大多数示例中,tcp_window 应为 1480。因此,要传输的最大字节数可以如上文所述推导出来。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2634 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3609 浏览 6 评论
5987 浏览 21 评论
939浏览 4评论
1315浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
582浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1302浏览 3评论
1358浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 16:05 , Processed in 1.202995 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号