完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求助高手帮忙
我用F407 实现 FreeRTOS+LwIP 的客户端程序 现在的问题是 用网络调试助手建立TCPserver 连接后 收发数据确实没什么问题 ,但是2台F407设备的客户端连接后 只能立即和最后一个连接的客户端 发送数据 ,选择给其他连接的客户端发送数据 大概要在14秒后 客户端才能收到数据 网络调试助手尝试过 其他测试客户端 没有这样的问题 ,我在F407 设备上实现server程序 通过多个网络调试助手模拟客户端程序 一切正常,所以 最后我分析 问题还是在于 F407客户端问题上 调试了几天 实在找不到原因 求大家帮忙分析下 代码如下 void task_TCP(void * pvParameters) { //消息队列用 //BaseType_t errr; //char enter=0; printf("Task3 startn"); ip_addr_t serverIpAddr; struct netbuf *revbuf; //static struct netbuf *sentbuf; static ip_addr_t loca_ipaddr; static u16_t loca_port; //void *data; //u32_t len; u32_t data_len = 0; err_t err; struct pbuf *q; // char Text[]="hello i am client! n"; IP4_ADDR(&serverIpAddr,server_IP[0],server_IP[1],server_IP[2],server_IP[3]);// 服务器IP地址 tcp_client_conn = netconn_new(NETCONN_TCP); while(1) { if (tcp_client_conn!=NULL) { netconn_bind(tcp_client_conn,IP_ADDR_ANY,TCP_SERVER_PORT); //本地绑定端口和IP 绑定后 使用此IP和端口对外发送 err = netconn_connect(tcp_client_conn, &serverIpAddr, TCP_SERVER_PORT); if(err != ERR_OK) { //在连接失败后 需要删除tcp_client_conn 句柄 重新创建才行 printf("TCP connect fail n"); netconn_delete(tcp_client_conn); //返回值不等于ERR_OK,删除tcp_clientconn连接 vTaskDelay(1000); tcp_client_conn = netconn_new(NETCONN_TCP); // } else if (err == ERR_OK) { //tcp_client_conn->recv_timeout = 10; netconn_getaddr(tcp_client_conn,&loca_ipaddr,&loca_port,1); //获取本地IP主机IP地址和端口号 printf("TCP Server 192.168.100.20:9000 连接成功.rn"); while(1) { if((err = netconn_recv(tcp_client_conn, &revbuf)) == ERR_OK) //接收到数据 { memset(tcp_client_recvbuf,0,TCP_CLIENT_RX_BUFSIZE); //数据接收缓冲区清零 //考虑需要进入临界区 taskENTER_CRITICAL(); for(q=revbuf->p;q!=NULL;q=q->next) //遍历完整个pbuf链表 { //判断要拷贝到TCP_CLIENT_RX_BUFSIZE中的数据是否大于TCP_CLIENT_RX_BUFSIZE的剩余空间,如果大于 //的话就只拷贝TCP_CLIENT_RX_BUFSIZE中剩余长度的数据,否则的话就拷贝所有的数据 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客户端接收数组,跳出 } //推出临界区 taskEXIT_CRITICAL(); data_len=0; //复制完成后data_len要清零。 //接收完成标志置1 //tcp_rev_finish=1; printf("%srn",tcp_client_recvbuf); netbuf_delete(revbuf); //解析数据包 if(my_cjson_Parse((char * )tcp_client_recvbuf)==1) //接收命令 { printf("rev data is suessn"); memset(tcp_client_recvbuf,0x0,TCP_CLIENT_RX_BUFSIZE); } } else if(err == ERR_CLSD) //关闭连接 { netconn_close(tcp_client_conn); netconn_delete(tcp_client_conn); printf("服务器192.168.100.20:9000断开连接rn"); break; } } } } else { printf("tcp_client_conn!=OKn"); } vTaskDelay(1); } //netconn_close(conn); //netconn_delete(conn); } |
|
相关推荐
5个回答
|
|
看下你,两个板子的ip地址还有mac还有分配的端口
|
|
|
|
高级语言服务器都是为每一个连接的客户端开启一个线程,如果你不能实现这种的话,那么就使用短链接,会话完毕立即关闭
|
|
|
|
你这意思是,两个407做客户端连网络助手有问题是吧?
|
|
|
|
你说对了 ,我疏忽了MAC地址了,所有客户端MAC地址都一样 ,修改成唯一性后就好了 非常感谢
|
|
|
|
你说对了 ,我疏忽了MAC地址了,所有客户端MAC地址都一样 ,修改成唯一性后就好了 非常感谢
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2632 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2471 浏览 5 评论
3308 浏览 3 评论
2910 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2864 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
764浏览 1评论
988浏览 0评论
1129浏览 0评论
745浏览 0评论
181浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-5 10:29 , Processed in 1.207880 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191