📄 ne2000.c
字号:
/*****************************
03.12.10 解决dvr死机问题,原因:在处理dvr命令时,有其他的网络命令干扰dvr命令的执行,多个全局变量公用
03.12.22 解决两台主机不能同时控制一台主机,原因:两秒限制
03.12.25 修改主机通信协议,设置本机ip地址命令原为IP修改为MYIP,原因:IP 和RIP 命令太相近(后又改回原来命令“ip”)
04.7.15 修改udp主动发送数据包,目的端口号为1521,命令为$
主程序
*******************************/
#include "net.h"
#include "struct.h"
#include "fundef.h"
#include "variable.h"
void main(void)
{
unsigned char i;
init();
while(1)
{
if(bCommandFlag){bCommandFlag=0;process_command();}
if(bDataFlag){bDataFlag=0;process_data();}
if(double_second)
{
double_second=0;
//process_telnet();
gateway_arp_request();
if(c_type==2)
{
if(ping_ip_address_ttl==0){send_string("3 a");}
else if(ping_ip_address_ttl>7){send_string("1 a");}
FunCheckOnline();
}
if(c_DvrRunTime==0)b_RunDvrCommand=0;
}
pwdi=!pwdi;
if(b_100ms)
{
b_100ms=0;
if((tcp_count>RetryTcp_Count)&&(ping_ip_address_ttl<2)&&(b_RunDvrCommand==0))
{//解析ip地址
if((dvr_ip_address.dwords&mask_ip_address.dwords)==(my_ip_address.dwords&mask_ip_address.dwords))
{//表示位于同一子网.
ping_ip_address_ttl=1;
arp_request(dvr_ip_address.dwords);
}else
{//表示属于不同的子网,需要通过网关.
ping_ip_address_ttl=10;
for(i=0;i<6;i++){dvr_ethernet_address.bytes[i]=gateway_ethernet_address.bytes[i];}
if(gateway_ip_address_ttl==0){ping_ip_address_ttl=0;}
}
tcp_count--;
}
}
process_telnet();
pwdi=!pwdi;
for(i=0;i<=rt_size;i++)
{
if(retransmit_buffer[i].rtframe.status!=0)
{
if(retransmit_buffer[i].rtframe.timeout>rt_time){retransmit_buffer[i].rtframe.timeout=0;}
if(retransmit_buffer[i].rtframe.timeout==0)
{
send_string("R a");
retransmit_packet(i);
retransmit_buffer[i].rtframe.status++;
if(retransmit_buffer[i].rtframe.status>rt_cishu){retransmit_buffer[i].rtframe.status=0;}
}
}
if(retransmitpacket[i].status!=0)
{
if(retransmitpacket[i].timeout>200){retransmitpacket[i].timeout=0;}
if(retransmitpacket[i].timeout==0){retransmitpacket[i].status=0;}
}
}
if(retransmit_buffer[rt_size].rtframe.status==0)
{
if((c_readcommand!=c_writecommand) || ((c_writecommand==c_readcommand)&& b_cb_full))
{b_cb_full=0;FunNetSendCommandBuffer();}
}
pwdi=!pwdi;
if(check_new_packet())
{
FunProcessRec();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -