想实现一个服务器给板子发数据,然后板子把数据中转给另一个服务器。如图这样的。
通过两个调试助手,这边发送。在另一个显示这样。
好像只有一个调试助手(代表PC的那个)连接上了。另一个链接不上。
求大神应该怎么实现,问题出在哪儿
- //tcp客户端任务函数
- static void tcp_client_thread(void *arg)
- {
- OS_CPU_SR cpu_sr;
- u32 data_len = 0;
- struct pbuf *q;
- err_t err1,err2,recv_err;
- static ip_addr_t server_ipaddr1,server_ipaddr2,loca_ipaddr;
- static u16_t server_port1,server_port2,loca_port;
- LWIP_UNUSED_ARG(arg);
- server_port1 = PC_PORT; //服务器1端口
- server_port2 = WD_PORT;//服务器2端口
- IP4_ADDR(&server_ipaddr1, lwipdev.pcip[0],lwipdev.pcip[1], lwipdev.pcip[2],lwipdev.pcip[3]);//服务器1IP
- IP4_ADDR(&server_ipaddr2, lwipdev.wdip[0],lwipdev.wdip[1], lwipdev.wdip[2],lwipdev.wdip[3]);//服务器2ip
- while (1)
- {
- tcp_clientconn = netconn_new(NETCONN_TCP); //创建一个TCP链接
- err1 = netconn_connect(tcp_clientconn,&server_ipaddr1,server_port1);//连接服务器1
- delay_ms(500);
- tcp_clientconn1 = netconn_new(NETCONN_TCP); //创建一个TCP链接
- err2 = netconn_connect(tcp_clientconn1,&server_ipaddr2,server_port2);//连接服务器2
- if(err1&&err2 != ERR_OK) netconn_delete(tcp_clientconn); //返回值不等于ERR_OK,删除tcp_clientconn连接
- else if (err1&&err2 == ERR_OK) //处理新连接的数据
- {
- struct netbuf *recvbuf;
- tcp_clientconn->recv_timeout = 10;
- // netconn_getaddr(tcp_clientconn,&loca_ipaddr,&loca_port,1); //获取本地IP主机IP地址和端口号
- while(1)
- {
-
- if((recv_err = netconn_recv(tcp_clientconn,&recvbuf)) == ERR_OK) //接收到数据
- {
- OS_ENTER_CRITICAL(); //关中断
- memset(tcp_client_recvbuf,0,TCP_CLIENT_RX_BUFSIZE); //数据接收缓冲区清零
- for(q=recvbuf->p;q!=NULL;q=q->next) //遍历完整个pbuf链表
- {
- if(q->len > (TCP_CLIENT_RX_BUFSIZE-data_len)) memcpy(tcp_client_recvbuf+data_len,q->payload,(TCP_CLIENT_RX_BUFSIZE-data_len));//拷贝数据
- else memcpy(tcp_client_recvbuf+data_len,q->payload,q->len);
- data_len += q->len;
- if(data_len > TCP_CLIENT_RX_BUFSIZE) break; //超出TCP客户端接收数组,跳出
- }
- OS_EXIT_CRITICAL(); //开中断
- data_len=0; //复制完成后data_len要清零。
- if((tcp_client_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //有数据要发送
- {
- err2 = netconn_write(tcp_clientconn1 ,tcp_client_recvbuf,strlen((char*)tcp_client_recvbuf),NETCONN_COPY); //发送tcp_client_recvbuf中的数据
- tcp_client_flag &= ~LWIP_SEND_DATA;
- }
- netbuf_delete(recvbuf);
- }else if(recv_err == ERR_CLSD) //关闭连接
- {
- netconn_close(tcp_clientconn);
- netconn_delete(tcp_clientconn);
- break;
- }
- }
- }
- }
- }
有没有谁做过类似的例程的
|