您好!
由于兼容性原因、我使用 NDK (v2.26.0.08)在 AM3352上实现 TCP/IP 服务器。
到目前为止、服务器运行良好、但当我发送数据时、TCP/IP 堆栈仅为每个 TCP 数据包传输1个数据字节。
我们通过此 TCP/IP 连接使用更高级别的协议、每个 statemachine 调用只能移动1个字节到发送缓冲区。
因此、我使用 NDK"发送"函数将1个字节移入 TCP/IP 缓冲区。
只要发送了整个"协议包"(在 while 循环中完成、因此实际上一行中有多个"发送"调用)、就会发生这种情况。
我*没有*启用"tcp_NODELAY"机制。
为了确保我还尝试主动禁用"tcp_NODELAY"机制、但没有成功。
int32_t opt = 0;
if (setsockopt (TCPIP->ClientSocket、IPPROTO_TCP、tcp_NODELAY、&opt、 sizeof (opt)= socket_error){
UART_printf ("***禁用 NODELAY 错误\n");
}否则{
UART_printf ("禁用 NODELAY 确定\n");
}
AFAIK Nagle 算法(=tcp_NODELAY 被禁用)应该防止这种行为、不是吗?
下面是捕获 AM3352响应1数据包的 Wireshark 的屏幕截图:
192.168.1.10 -> PC
192.168.1.20 -> AM3352
NDK 缓冲器配置:
NDK TCP 设置:
谢谢、
Markus