|
本帖最后由 sam2022 于 2024-1-16 18:08 编辑
前提 : STM32F4上lwip RAW做了个webserver,电脑浏览器做客户端显示网页与数据; 网页脚本有周期定时向STM32发送请求数据,STM32应答数据包,浏览器动态刷新显示数据;
问题: 浏览器周期定时请求都要握手,能不能是长连接?请大佬指点迷津,多谢!
1、浏览器网页内容显示后,有些参数可以修改,然后提交给STM32; 如果只是提交数据,无论间隔多长时间提交数据,STM32F4都能接收到,都能成功,这是长连接;
2、如果网页脚本周期定时发起POST请求,STM32成功应答5、6次收不到请求了(浏览器还在发送请求);估计是连接已经挂掉了;虽然STM32有配置keep-alive,但没应答浏览器的keep-alive;
3、static void
tcp_listen_input(struct tcp_pcb_listen *pcb)
{
struct tcp_pcb *npcb;
u32_t iss;
err_t rc;
if (flags & TCP_RST) {
/* An incoming RST should be ignored. Return. */
return;
}
LWIP_ASSERT("tcp_listen_input: invalid pcb", pcb != NULL);
/* In the LISTEN state, we check for incoming SYN segments,
creates a new PCB, and responds with a SYN|ACK. */
if (flags & TCP_ACK) {
/* For incoming segments with the ACK flag set, respond with a
RST. */
LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n"));
tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(),
ip_current_src_addr(), tcphdr->dest, tcphdr->src);
} else if (flags & TCP_SYN) {
LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest));
=====================================
为什么listen在接收到ACK应答后,要发送RST? 这不是断开连接吗?
4、
|
|