初级会员
- 积分
- 197
- 金钱
- 197
- 注册时间
- 2018-1-12
- 在线时间
- 34 小时
|
你好,请问,我在移植LWIP做服务器的实验例程的程序到我的程序中时,第一次网络助手(客户端)可以连接成功,发送数据什么也都正常,随便怎么发都没问题;但是将网络助手(客户端)断开连接后就连接不上了;还有就是在不发数据前,客户端断开连接后是可以连接的。我debug调试时发现连接失败时出现创建一个新的pcb失败【tcppcb=tcp_new();】,请问客户端连接和发送数据有关?还是有其他什么问题?部分代码如下:
void tcp_server_test(u8 flag)
{
err_t err;
struct tcp_pcb *tcppcb; //定义一个TCP服务器控制块
struct tcp_pcb *tcppcbconn; //定义一个TCP服务器控制块
u8 *tbuf;
u8 key;
u8 res=0;
u8 t=0;
u8 connflag=0; //连接标记
if(flag == 0)
{
tbuf=mymalloc(SRAMIN,200); //申请内存
if(tbuf==NULL)return ; //内存申请失败了,直接退出
tcppcb=tcp_new(); //创建一个新的pcb
if(tcppcb) //创建成功
{
err=tcp_bind(tcppcb,IP_ADDR_ANY,TCP_SERVER_PORT); //将本地IP与指定的端口号绑定在一起,IP_ADDR_ANY为绑定本地所有的IP地址
if(err==ERR_OK) //绑定完成
{
tcppcbconn=tcp_listen(tcppcb); //设置tcppcb进入监听状态
tcp_accept(tcppcbconn,tcp_server_accept); //初始化LWIP的tcp_accept的回调函数
}else res=1;
}else res=1;
while(res==0)
{
lwip_periodic_handle();
delay_ms(2);
t++;
if(t==200)
{
t=0;
if(connflag==0&&(tcp_server_flag&(1<<5))==0)//未连接上,则尝试重连
{
tcp_server_connection_close(tcppcb,0);//关闭TCP Server连接
tcp_server_connection_close(tcppcbconn,0);//关闭TCP Server连接
tcppcb=tcp_new(); //创建一个新的pcb
if(tcppcb) //创建成功
{
err=tcp_bind(tcppcb,IP_ADDR_ANY,TCP_SERVER_PORT); //将本地IP与指定的端口号绑定在一起,IP_ADDR_ANY为绑定本地所有的IP地址
if(err==ERR_OK) //绑定完成
{
tcppcbconn=tcp_listen(tcppcb); //设置tcppcb进入监听状态
tcp_accept(tcppcbconn,tcp_server_accept); //初始化LWIP的tcp_accept的回调函数
res=1;
}
}
}
}
}
}
else
{
tcp_server_connection_close(tcppcb,0);//关闭TCP Server连接
tcp_server_connection_close(tcppcbconn,0);//关闭TCP Server连接
// tcp_server_remove_timewait(); //强制删除TCP Server主动断开时的time wait
memset(tcppcb,0,sizeof(struct tcp_pcb));
memset(tcppcbconn,0,sizeof(struct tcp_pcb));
myfree(SRAMIN,tbuf);
flag = 0;
tbuf=mymalloc(SRAMIN,200); //申请内存
if(tbuf==NULL)return ; //内存申请失败了,直接退出
tcppcb=tcp_new(); //创建一个新的pcb
if(tcppcb) //创建成功
{
err=tcp_bind(tcppcb,IP_ADDR_ANY,TCP_SERVER_PORT); //将本地IP与指定的端口号绑定在一起,IP_ADDR_ANY为绑定本地所有的IP地址
if(err==ERR_OK) //绑定完成
{
tcppcbconn=tcp_listen(tcppcb); //设置tcppcb进入监听状态
tcp_accept(tcppcbconn,tcp_server_accept); //初始化LWIP的tcp_accept的回调函数
}else res=1;
}
}
myfree(SRAMIN,tbuf);
}
|
|