tcp_write之后,调用tcp_output会立即发送吗?

2019-12-11 18:21发布

如题,使用的是stm32cube生成的lwip,现在tcp想往外面发送大量的数据,查资料说,相继调用这两个函数,即可用将数据发送出去。
但是现在的现象是,我设置的缓冲区是4096byte,发送内容10多k,而收方只收到1.7k多。
发送方,最终会因为tcp_sndbuf(tpcb);返回0,累计超时退出。
代码如下:
  1. do
  2.         {
  3.                 int ret=0;
  4.                 buf_len=tcp_sndbuf(tpcb);
  5.                 //if(buf_len>600)buf_len=600;
  6.                 if(buf_len==0)
  7.                 {
  8.                         errCnt++;
  9.                 }
  10.                 else
  11.                 {
  12.                         errCnt=0;
  13.                 }
  14.                 if(errCnt>10000)
  15.                 {
  16.                         printf("no enough buffer to write, exit... ");
  17.                         break;
  18.                 }
  19.                 if(file_len<=buf_len)
  20.                 {
  21.                         ret=tcp_write(tpcb,file_data,file_len,1);
  22.                         if(ERR_OK!=ret)
  23.                         {
  24.                                 printf("tcp write error code=%d... ",ret);
  25.                         }
  26.                         //printf("%.*s", file_len, &file_data[l]);
  27.                         l+=file_len;
  28.                 }
  29.                 else
  30.                 {
  31.                         if(buf_len>(file_len-l))
  32.                         {
  33.                                 //printf("%.*s", file_len-l, &file_data[l]);
  34.                                 ret=tcp_write(tpcb,&file_data[l],file_len-l,1);
  35.                                 if(ERR_OK!=ret)               
  36.                                 {
  37.                                         printf("tcp write error code=%d... ",ret);
  38.                                 }
  39.                                 l+=file_len;       
  40.                         }
  41.                         else                                                       
  42.                         {
  43.                                 //printf("%.*s", tcp_sndbuf(tpcb), &file_data[l]);
  44.                                 ret=tcp_write(tpcb,&file_data[l],buf_len,1);
  45.                                 if(ERR_OK!=ret)
  46.                                 {
  47.                                         printf("tcp write error code=%d... ",ret);
  48.                                 }
  49.                                 l+=buf_len;                                       
  50.                         }                                                                                                                       
  51.                 }
  52.                 if(tcp_output(tpcb)!=ERR_OK)
  53.                 {
  54.                         printf("tcp_output error... ");
  55.                 }       
  56.                 else
  57.                 {
  58.                         //extern struct netif gnetif;
  59.                         MX_LWIP_Process();//如果加了这句话,才能完整发送所有内容
  60.                 }
  61.                 if(ret==-11)
  62.                 {
  63.                         return;
  64.                 }
  65.                
  66.         }while(l<file_len);
复制代码

就算是这个代码以后,加上如下代码,接收方都无法收到1.7k以后的数据

  1. while(1)
  2.         {
  3.                 tcp_output(tpcb);
  4.         }
复制代码

是不是我哪里的配置没搞好?
官方配置,只将发送缓冲区修改成了4096,
mem_size 是 9216

请大家指导一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。