中级会员
 
- 积分
- 331
- 金钱
- 331
- 注册时间
- 2013-7-25
- 在线时间
- 36 小时
|
发表于 2015-8-16 13:42:13
|
显示全部楼层
while(1)
{
if((tcp_server_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //????????·???
{
err_tcp = netconn_write(newconn ,tcp_server_sendbuf,strlen((char*)tcp_server_sendbuf),NETCONN_COPY); //·???tcp_server_sendbuf????????
if(err_tcp != ERR_OK)
{
printf("·????§°?\r\n");
}
tcp_server_flag &= ~LWIP_SEND_DATA;
}
recv_err = netconn_recv(newconn,&recvbuf);
printf("recv_err:%d",recv_err);
if((recv_err) == ERR_OK) //??????????
{
OS_CRITICAL_ENTER();//??????????
memset(tcp_server_recvbuf,0,TCP_SERVER_RX_BUFSIZE);
for(q=recvbuf->p;q!=NULL;q=q->next)
{
if(q->len > (TCP_SERVER_RX_BUFSIZE-data_len_tcp))
memcpy(tcp_server_recvbuf+data_len_tcp,q->payload,(TCP_SERVER_RX_BUFSIZE-data_len_tcp));
else memcpy(tcp_server_recvbuf+data_len_tcp,q->payload,q->len);
data_len_tcp += q->len;
if(data_len_tcp > TCP_SERVER_RX_BUFSIZE) break;
}
OS_CRITICAL_EXIT();
data_len_tcp=0;
printf("%s\r\n",tcp_server_recvbuf);
netbuf_delete(recvbuf);
}else if(recv_err < ERR_ISCONN) //??±?????
{
netconn_close(newconn);
netconn_delete(newconn);
printf("?÷?ú:%d.%d.%d.%d??????·????÷??????\r\n",remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3]);
break;
}
}
recv_err = netconn_recv(newconn,&recvbuf); 这段代码是例程TCP服务端例程中tcp_server_demo.c中TCP任务中的一段代码,连接后收发正常,我在调试过程中发现,点击TCP断开后这一句返回的仍然是“0”!,然后执行后面的接收时就进入了HardFault_Handler异常,就跑死了。断开后应该返回负数才对啊,正常接收数据才会返回“0”的,请教版主!!!
|
|