|
本帖最后由 younew 于 2025-7-3 20:58 编辑
谢谢!
V7-2402的代码我看了:
···
while(1){
...省略
if((socket_state == NX_TCP_ESTABLISHED)&&(ret == NX_SUCCESS))
{
/* 接收TCP客户端发的TCP数据包 */
ret = nx_tcp_socket_receive(&TCPSocket, /* TCP Socket控制块 */
&data_packet, /* 接收到的数据包 */
NX_WAIT_FOREVER); /* 永久等待 */
if (ret == NX_SUCCESS)
{
/* 获取客户端的IP地址和端口 */
nx_tcp_socket_peer_info_get(&TCPSocket, /* TCP Socket控制块 */
&peer_ip_address, /* 远程IP地址 */
&peer_port); /* 远程端口号 */
/* 获取客户端发来的数据 */
nx_packet_data_retrieve(data_packet, /* 接收到的数据包 */
data_buffer, /* 解析出数据 */
&bytes_read); /* 数据大小 */
/* 打印接收到数据 */
PRINT_DATA(peer_ip_address, (unsigned int)peer_port, data_buffer);
/* 立即将接收到的数据发送回去 */
ret = nx_tcp_socket_send(&TCPSocket, /* TCP Socket控制块 */
data_packet, /* 数据包 */
NX_WAIT_FOREVER); /* 永久等待 */
}
else
{
/* 断开连接 */
nx_tcp_socket_disconnect(&TCPSocket,
NX_WAIT_FOREVER);
/* 解除Socket和服务器端口的绑定 */
nx_tcp_server_socket_unaccept(&TCPSocket);
/* 重新监听 */
nx_tcp_server_socket_relisten(&ip_0,
DEFAULT_PORT,
&TCPSocket);
}
}
}
···和我的代码类似啊,也是调用nx_tcp_socket_receive和nx_packet_data_retrieve接收收据。但是例程中没有涉及应用层缓存满了以后该怎么处理的啊。
问了几个AI都说,及时用户层缓存满了也要不停的调用nx_tcp_socket_receive,否则netx协议栈的接收window无法更新。
我反问AI,我缓存满了再继续调用nx_tcp_socket_receive,数据没地方存啊,岂不是要丢弃啊?然后AI说应用层要配合netx协议栈一起做流控。
说明:我的用户缓存是远大于接收window的。
|
|