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条回答
Study_Stellaris
1楼-- · 2019-03-24 13:28
 精彩回答 2  元偷偷看……
warcraftiii
2楼-- · 2019-03-24 16:25
< :TI_MSP430_内容页_SA7 --> PC做Server, 板子做Client。 板子向PC发3个无符号整形数据,接收PC发过来的1个无符号整形数据。就这点功能。改了一下tcpclient_init()
=========================================================
void tcpclient_init()
{
  struct tcp_pcb *pcb;
  struct ip_addr ipaddr;
   struct tcp_pcb *pcb_send;
  
  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);

  pcb_send = tcp_new();
  tcp_bind(pcb_send, IP_ADDR_ANY, TCP_PORT_PMSM60);
  tcp_connect(pcb_send, &ipaddr, TCP_PORT_PMSM60, tcp_connected);
}
这回板子发送数据后,PC程序出现Debug Assertion Failed!错误。忽略后能显示收到的数据。但是板子收不到PC发来的数据。
warcraftiii
3楼-- · 2019-03-24 16:53
板子初始化:
pcb = tpc_new();                //接收pcb
pcb_send = tpc_new();    //发送pcb
tcp_bind(pcb, IP_ADDR_ANY, TCP_PORT_PMSM60);
tcp_bind(pcb_send, IP_ADDR_ANY, TCP_PORT_PMSM60);
收发使用两个pcb,与同一个端口绑定,是否可以这样设置?

PC端使用CAsyncSocket类定义了两个socket:       
m_sListenSocket;     //监听
m_sConnectSocket; //发送
PC程序与PC程序间收发数据都正常(这两个PC程序类似),但是PC向板子发送数据(下面这句)
m_sConnectSocket.Send(LPCTSTR(m_strSpeed), iLen)
出现错误,错误代码10038:WSAENOTSOCK   

对LwIP的TCP收发流程不理解,迷糊呀!
warcraftiii
4楼-- · 2019-03-24 22:16
 精彩回答 2  元偷偷看……
warcraftiii
5楼-- · 2019-03-25 03:19
PC的Server
接收连接:m_sListenSocket.Accept(m_sConnectSocket);
接收数据:m_sConnectSocket.Receive(pBuf, iBufSize);
发送数据:m_sConnectSocket.Send(LPCTSTR(m_strSpeed), iLen);
Server程序并没有明确设定客户端IP和端口的语句,至少我没写,但是却能向另一个PC上的Client程序发送数据。

MFC的Socket程序接收和发送用的是同一个端口么?
LwIP的接收和发送用的是同一个端口么?

尽情的鄙视我吧,鄙视完了给讲讲哈!
o0pingu0o
6楼-- · 2019-03-25 05:22
要看回调函数里的,你可以参考下周立功的呀。你用的TCP还是UDP的。做过UDP的成了,UDP的简单点。

[ 本帖最后由 o0pingu0o 于 2011-11-10 17:11 编辑 ]

一周热门 更多>

相关问题

    相关文章