社区导航

 

搜索
查看: 16277|回复: 17

[求助] 关于LWip的TCP发送的问题

[复制链接]

37

TA的帖子

0

TA的资源

禁止访问

发表于 2010-12-16 11:23 | 显示全部楼层 |阅读模式

984

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2010-12-16 11:31 | 显示全部楼层

回复 楼主 sdlczxk2002 的帖子

应该不是这里的原因,可能是分配的pbuf没有释放。我在论坛上的另一个帖子中说个这个问题。

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 11:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 11:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

984

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2010-12-16 12:30 | 显示全部楼层

回复 4楼 sdlczxk2002 的帖子

把部分源码贴上来看看,这样才能知道原因在哪儿。

[ 本帖最后由 academic 于 2010-12-16 12:40 编辑 ]

回复

使用道具 举报

2821

TA的帖子

0

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2010-12-16 13:04 | 显示全部楼层
把源码贴上来看了才知道,应该是内存没用释放吧

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 13:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

984

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2010-12-16 13:49 | 显示全部楼层
楼上的代码是不是贴错了for(i=0;i UDP_tcvdate=*q;//将接受到的数字转移到新的数组里面

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 13:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

22

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2010-12-16 14:14 | 显示全部楼层

我也遇到和LZ一样的问题,发到4096就不能发送,PUBFF我也已经释放了

/-----------------------------------------------------------------------------
//
// 接收到数据的回调函数
//
//-----------------------------------------------------------------------------
err_t recv_now(void *arg,struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
 

   if(p != NULL)                              //如果收到的数据不为空              
   {
     Oled_Dis_Clear();
  Oled_Dis_string(0, 0,(char*)p->payload);

 
  Uart0_Send((unsigned char*)p->payload,p->len);
 
  
  tcp_write(tpcb,p->payload,p->len,0);     //将接收到的数据发送出去        
     pbuf_free(p);                            // 释放缓冲区数据
   }
   return ERR_OK; 
}


//-----------------------------------------------------------------------------
//
// 接受连接请求
//
//-----------------------------------------------------------------------------
err_t accept_now(void *arg, struct tcp_pcb *newpcb, err_t err)
{
    tcp_accepted(newpcb);
 tcp_recv(newpcb,recv_now);
 return 0;
}

//-----------------------------------------------------------------------------
//
// 初始化客户端TCP
//
//-----------------------------------------------------------------------------
void TCP_Client_Init()
{
  struct tcp_pcb *local_pcb;
  struct tcp_pcb *now_pcb;
   
  local_pcb = tcp_new();                       // 建立通信的TCP控制块(Clipcb)
 
  tcp_bind(local_pcb,IP_ADDR_ANY,ENET_LWIP_TCP_PORT);        // 绑定本地IP地址和端口号
 
  now_pcb = tcp_listen (local_pcb);      // 监听端口
  
  tcp_accept(now_pcb,accept_now);
}

[ 本帖最后由 greedangel 于 2010-12-16 14:24 编辑 ]

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 14:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

984

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2010-12-16 14:23 | 显示全部楼层

回复 11楼 sdlczxk2002 的帖子

你可以开启一下这个LWIP_DEBUGF,应该很容易就能看出来整个发送过程,找到原因在哪儿。看上面的代码似乎问题不在你贴出来的那部分。。
楼上的尝试在tcp_write后边加上tcp_output,试试看。

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 15:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

2821

TA的帖子

0

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2010-12-16 16:52 | 显示全部楼层
前面4096个字节客户端收到没有?我用的代码和楼上的差不多,但是我没有遇到这个问题

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-16 17:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

22

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2010-12-20 14:51 | 显示全部楼层

只要在pbuf_free(p);后面加句tcp_recved(pcb,p->tot_len);就可以解决问题了。看那函数说明说tcp_recved可以防止窗过大,具体我也不是很清楚,望有高人详细点评!


回复

使用道具 举报

984

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2010-12-23 09:32 | 显示全部楼层

回复 16楼 greedangel 的帖子

谢谢,我认为极有可能是这个原因哦。tcp_recved()好像是用来向发送方通告窗口大小的,一般在应用层开始处理接收数据的时候第一个调用的应该就是它。基础不扎实,把它的重要性给忽略了。呵呵。

回复

使用道具 举报

37

TA的帖子

0

TA的资源

禁止访问

 楼主| 发表于 2010-12-23 11:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-1-29 04:46 , Processed in 0.484743 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表