初级会员

- 积分
- 80
- 金钱
- 80
- 注册时间
- 2017-1-9
- 在线时间
- 21 小时
|
1金钱
本帖最后由 AAonline 于 2018-12-11 18:40 编辑
请教大家一个问题
我在F4上移植了lwip, 创建了一个TCP客户端
我 #define 了 TCP_MSS 等于 1460,
这个时候如果TCP服务器给我发送了1000个字节长度的数据,
我是不是只会进一次TCP客户端的接收回调函数,然后在回调函数中循环接收这1000个字节,直到接收完成?
还是说我会以536字节进行分片接收?从而多次进入接收回调函数,直到接收完这1000个字节?
我现在的实验结果是以536字节分片多次进入接收回调函数,
实验现象与我的理解不符,所以想问一下是我理解有误还是其他什么问题
这是回调函数:
uint8_t tcp_client_recvbuf[TCP_CLIENT_RX_BUFSIZE];
err_t TCP_Client_Recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
uint32_t data_len = 0;
if(p != NULL)
{
tcp_recved(pcb, p->tot_len);
memset(tcp_client_recvbuf, 0, sizeof(tcp_client_recvbuf));
SEGGER_RTT_printf(0, "enter tcp receive 1 \r\n");
SEGGER_RTT_printf(0, "p->tot_len = %d \r\n", p->tot_len);
while(p != NULL)
{
SEGGER_RTT_printf(0, "enter tcp receive 2 \r\n");
SEGGER_RTT_printf(0, "p->len = %d \r\n", p->len);
memcpy(tcp_client_recvbuf + data_len, p->payload, p->len);
TCP_Client_Send_Data(pcb, tcp_client_recvbuf + data_len, p->len);
data_len += p->len;
p = p->next;
}
}
else
{
tcp_close(pcb);
}
pbuf_free(p);
err = ERR_OK;
return err;
}
这是我接收536个字节的打印信息:
这是我接收537个字节时候的打印信息:
很明显这个回调函数在接收的字节数大于536时又被调用了一次,按照我的想法既然定义了TCP_MSS为1460
那么只有接收的数据大于1460的时候才会出现上述情况,可是现在在接收数据大于536时就出现了,有没有哪位大哥知道的,指导一下小弟,谢谢啦~
|
|