我使用探索者的
开发板更改一个代码,是使用RAM_TCP客户端为模版的,现在遇到一个问题,想请教一下各位大神。这边的客户端需要通过网络循环发送“1;20100001”,“1;20100002”,“1;20100003”这一类的字符串,每次只能发送一个,发送一个完成后服务器那边会把链接断掉,然后下一次发送需要重新握手链接。现在问题是,我在发送的时候,程序会随机的在发送后面某一个一个字符串的时候死掉。即使重新链接也没作用。有的时候第二个就死,有时候第六个死,随机的。下面是代码。
[C]
纯文本查看 复制代码
void tcp_client_test(){ struct tcp_
PCB *tcppcb; //定义一个TCP服务器控制块 struct ip_addr rm
tipaddr; //远端ip地址 u8 *tbuf; u8 res=0; u8 t=0; tcp_client_set_remoteip();//先选择IP tbuf=mymalloc(SRAMIN,200); //申请内存 if(tbuf==NULL)return ; //内存申请失败了,直接退出 tcppcb=tcp_new(); //创建一个新的pcb if(tcppcb) //创建成功 { IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]); tcp_connect(tcppcb,&rmtipaddr,TCP_CLIENT_PORT,tcp_client_connected); //连接到目的地址的指定端口上,当连接成功后回调tcp_client_connected()函数 }else res=1; while(res==0) { get_inquire_string(num); tcp_client_sendbuf=string_inquire; if(tcp_client_flag&1<<5)//是否连接上? { tcp_client_flag|=1<<7;//标记要发送数据 } if(tcp_client_flag&1<<6)//是否收到数据 { OLED_ShowString(90,48,tcp_client_recvbuf,12,1);//显示接收到的数据 OLED_Refresh_Gram(); tcp_client_flag&=~(1<<6);//标记数据已经被处理了. break; } lwip_periodic_handle(); delay_ms(2); t++; if(t==200) { if((tcp_client_flag&1<<5)==0)//未连接上,则尝试重连 { tcp_client_connection_close(tcppcb,0);//关闭连接 tcppcb=tcp_new(); //创建一个新的pcb if(tcppcb) //创建成功 { IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]); tcp_connect(tcppcb,&rmtipaddr,TCP_CLIENT_PORT,tcp_client_connected);//连接到目的地址的指定端口上,当连接成功后回调tcp_client_connected()函数 } if((tcp_client_flag&1<<5)==0) { tcp_client_connection_close(tcppcb,0);//关闭连接 tcppcb=tcp_new(); //创建一个新的pcb if(tcppcb) //创建成功 { IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]); tcp_connect(tcppcb,&rmtipaddr,TCP_CLIENT_PORT,tcp_client_connected);//连接到目的地址的指定端口上,当连接成功后回调tcp_client_connected()函数 } if((tcp_client_flag&1<<5)==0) { num--; break; } } } t=0; LED0=!LED0; } } num++;if(num>9) num=0; tcp_client_connection_close(tcppcb,0);//关闭TCP Client连接 myfree(SRAMIN,tbuf);}