LwIP 的TCP连接无法同时收发问题请教。

2019-03-24 08:52发布

结构:LMS8962的板子跟PC连接,TCP协议,无操作系统。PC端程序是VC写的,测试都正常。
功能:板子向PC发送3个 unsigned int,PC向板子发送1个unsigned int
现象:单独写了板子向PC发送程序:板子正常发送,PC端正常接收到。
      单独写了板子接收PC发送字符的程序:板子正常接收,PC端正常发送。

问题:两个程序的功能合在一起后,必须板子先启动,然后运行PC程序,板子才能接收到数据。但板子始终无法发送数据,连自定义的发送回调函数都进不去。

下面是初始化代码。各位给指点下,这么写有问题没?

#define TCP_PORT_PMSM60 4000    // TCP port : 4000
void tcpclient_init()
{
  struct tcp_pcb *pcb;
  UARTprintf("tcpclient_init ");
  IP4_ADDR(&ipaddr, 119,78,208,24);  //Server PC IP address
  pcb = tcp_new();
  tcp_bind(pcb, IP_ADDR_ANY, TCP_PORT_PMSM60);
  pcb = tcp_listen(pcb);
  tcp_accept(pcb, tcp_acceptset);
  tcp_connect(pcb, &ipaddr, TCP_PORT_PMSM60, tcp_connected);
}

向看帖的筒子致敬!!!!! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
warcraftiii
1楼-- · 2019-03-26 07:57
 精彩回答 2  元偷偷看……
warcraftiii
2楼-- · 2019-03-26 13:36
接收数据时进入tcp_recv_null是因为之前TCP_EVENT_ACCEPT(pcb, ERR_OK, err);没有被执行。
此时pcb->state == ESTABLISHED
只有当pcb->state == SYN_RCVD的时候才能有机会执行TCP_EVENT_ACCEPT 。
tcp的发送和接受是否使用同一个pcb?
还是发送和接受各需要一个pcb?
pcb与端口是一一对应,还是可以一对多,多对一?

谢谢楼上的
求关注!!!
warcraftiii
3楼-- · 2019-03-26 16:04
求关注!!!
zqzq501311
4楼-- · 2019-03-26 16:56
 精彩回答 2  元偷偷看……
zqzq501311
5楼-- · 2019-03-26 20:05
我目前用的例程就是论坛里面分享的一个uCOSii + lwIP 的WEB例子 ,请教了!
warcraftiii
6楼-- · 2019-03-27 00:49
netconn_bind()是Sequential AP么?

现在只是在模仿例子程序,能看明白的只是回调函数一小块。
至于TCP从连接建立到关闭的过程,tpc_pcb在各种状态下的含义和处理方法等等,这些应该是TCP处理流程的主体。
用LwIP的代码来讲解这一流程的资料较少。

一周热门 更多>

相关问题

    相关文章