天线|RF射频
直播中

孙海燕

8年用户 183经验值
私信 关注
[问答]

请问lwip的http输出函数的问题该如何解决?

最近在调试http的应用,打算让网页输出一个表格,表格应该有250行
但实际上输出只有22行,
static char http_buf[512]={0};
/*-----------------------------------------------------------------------------------*/
static err_t
http_recv(void *arg, struct tcp_PCB *pcb, struct pbuf *p, err_t err)//处理输入数据

struct http_state *hs;
data = p->payload;//把接收到的数据指针交给data
  for(i=0;i<250;i++)
  {
      
//AlARM_Record_Read(&Alarm_record,i);//刷新数据
Alarm_Record_Read(&Alarm_record,(i)%ALARM_RECORD_PAGE_AMOUNT);//刷新数据
//i=i%ALARM_RECORD_PAGE_AMOUNT;
      ret=sprintf(http_buf, "");
ret+=sprintf(http_buf+ret, "%04d%03d%03d",Alarm_record.AlarmEvent.Zone,Alarm_record.AlarmEvent.EventCode,Alarm_record.AlarmEvent.EventType);
ret+=sprintf(http_buf+ret,"%04d-%2d-%2d ",Alarm_record.AlarmEvent.Time.tm_year,Alarm_record.AlarmEvent.Time.tm_mon,Alarm_record.AlarmEvent.Time.tm_mday);
ret+=sprintf(http_buf+ret,"%2d:%02d:%02d",Alarm_record.AlarmEvent.Time.tm_hour,Alarm_record.AlarmEvent.Time.tm_min,Alarm_record.AlarmEvent.Time.tm_sec);
ret+=sprintf(http_buf+ret,"%d%d",Alarm_record.AlarmFlag[2],Alarm_record.AlarmFlag[3]);
ret+=sprintf(http_buf+ret, "");
  

//i=i%ALARM_RECORD_PAGE_AMOUNT;
//for(j=0;j++;j {
       hs->file =(char*)&http_buf;//
hs->left = ret;
   send_data(pcb, hs);
tcp_output(pcb);
    tcp_sent(pcb, http_sent);
tcp_output(pcb);
}
//tcp_write(pcb,http_buf,sizeof(http_buf),0);
    memset(http_buf,0,sizeof(http_buf));//清空数据  
}

回帖(10)

李琴

2019-7-15 12:52:44
帮顶....
举报

刘岩丘

2019-7-15 12:58:10
static char http_buf[512]={0};  <--------- buffer 太小了, http 隨便一個文件都幾k起
举报

罗标雄

2019-7-15 13:05:00
我是分次数发的 
一次发的数据只占buffer的80个值,也就是ret的值,我要发250次,前20次可以正常发出来,后边的就杳无音信了
举报

王玉宁

2019-7-15 13:13:35
这几天在做Lwip TCP服务器时,遇到了一些问题,和你的情况有点雷同,希望对你有帮助。
数据量是16K,每次1.2K左右,连续发15次,每5s发送一次,但是在调试过程中每次发11次就发不出去了
改变了#define __LWIPOPTS_H__文件里
#define TCP_SND_BUF             (120*TCP_MSS)
#define TCP_SND_QUEUELEN   ((120 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS))
后,就没问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分