完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想实现一个服务器给板子发数据,然后板子把数据中转给另一个服务器。如图这样的。
通过两个调试助手,这边发送。在另一个显示这样。 好像只有一个调试助手(代表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; } } } } } |
|
相关推荐
13个回答
|
|
单网卡。恩,服务器Ip可以一样,设置两个socket就可以了。现在就是把服务器IP设置一样,网络调试助手还是不能连接上。是因为单网卡的问题?
|
|
|
|
|
|
|
|
你两个网络调试助手的配置 贴上来 看看?
|
|
|
|
楼主怎么解决的呢,现在也想弄一个试试,顶一下
|
|
|
|
跟网卡没关系,建两个客户端就可以了,地址是IP地址,多对多的呀,连到统一路由器求可以了
|
|
|
|
楼主怎么解决的呢,现在也想弄一个试试,顶一下
|
|
|
|
创建两个线程。理解成两个任务也行。两个客户端连接
|
|
|
|
既然两个netconn 为什么不用两个线程
|
|
|
|
就是两个线程的
|
|
|
|
我怎么看你都是在一个线程里面你创建了两个连接。。。
|
|
|
|
上面贴出来的代码是错误的。应该是一个线程,一个端口,当时刚接触以太网,写错了。创建两个socket就OK了
|
|
|
|
如果是裸机呢?裸机创建不了双线程,我该如何实现一个客户端与两台服务器通信呢?
|
|
|
|
好贴帮顶
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2363 浏览 5 评论
3209 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
665浏览 1评论
904浏览 0评论
1025浏览 0评论
668浏览 0评论
498浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:29 , Processed in 1.579665 second(s), Total 103, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号