|
楼主 |
发表于 2011-10-26 08:12:48
|
显示全部楼层
void tcp_link_chechktime(void* parameter)
{
register rt_uint16_t phy_bsr;
static uint32_t tcp_tx_timeout = 0;
static uint8_t time = 0;
/*
* TCP 网络链接状态检测
*/
time ++;
phy_bsr = ETH_ReadPHYRegister(0X00, PHY_BSR);
if((phy_bsr & PHY_Linked_Status) == 0) /* DM9161A链接状态寄存器 */
{
tcp_sever_static = sever_static_break; /* 网线断开 */
if(session != RT_NULL)
{
// tcp_session_close(session);
}
if(time%60 == 0)
{
rt_kprintf("The net link break! Please check network cable!\r\n");
}
}
if(((phy_bsr & PHY_Linked_Status) != 0)) /* 网络线重新连接 */
{
if(tcp_sever_static != sever_static_ok)
{
rt_kprintf("The network cable has been inserted!\r\n");
}
tcp_sever_static = sever_static_ok;
}
/*
* TCP 定时发送数据信号量释放
*/
tcp_tx_timeout++;
if((SysCmdPro.status.bits.Tcp == 1) /* TCP有发送数据请求 */
&&(tcp_tx_timeout >= StatusTime.TcpDumpTime ) /* TCP定时发送数据时间到 */
&&(tcp_sever_static == sever_static_ok)) /* TCP服务器和网络链接正常 */
{
tcp_tx_timeout = 0;
rt_sem_release(&tcp_tx_t_sem); /* 定时发送时间到 */
}
else if((SysCmdPro.status.bits.Tcp == 0) /* 定时发送功能关闭 */
||(tcp_sever_static != sever_static_ok)) /* 网络链接不正常 */
{
tcp_tx_timeout = 0;
}
}
上面是网络连接判断
下面是接收数据处理,如果网络断开 服务器关闭
/*
*等待接收消息
*/
bytes_received = tcp_session_read(session, (rt_uint8_t*)recv_data, sizeof(recv_data));
/* 接收消息故障断开链接 */
if(bytes_received <= 0) /* 当收到数据为0时,表示服务器关闭 */
{
tcp_session_close(session); /* 当网络断开后,不能检测到服务器关闭 */
tcp_sever_static = sever_static_close; /* 需要增加服务器关系,如果先断开网络,后服务器关闭,不再重新连接,需要增加接收超时功能,用来判断网络断开*/
net_link_check_time = 0;
break;
} |
|