📄 server452.c
字号:
#include "tcptask.h"
#include "emNETRTOS.H"
#include "p18f452.h"
#include "Tcp.h"
#pragma udata MAILDATABANK=0x300
unsigned char TXbuffer[64];//就这么简单吗??
unsigned char RCbuffer[64];
#pragma udata
#define STACK_USE_ICMP
#define STACK_USE_ARP
#define emDintl INTCONbits.GIEL=0 /* disable low priority int*/ //屏蔽所有L中断
#define emEintl INTCONbits.GIEL=1 //使能所有L中断
#define emDinth INTCONbits.GIEH=0 /* when low inttrupt disable high priority int*///屏蔽所有H中断
#define emEinth INTCONbits.GIEH=1
#define emEtmr0 INTCONbits.TMR0IF=0 /*enable TMR0 intrrupt again*/
extern unsigned char RunID,vpc,stemp,tbsr,twag;
extern char tempRunID;
extern emInt8 Htimer1,Htimer0;
extern struct tcb pTcb[MAX_TASK];
extern unsigned long mSeconds;
extern WORD _NextPort;
extern DWORD ISS;
extern SOCKET_INFO TCB[MAX_SOCKETS];
BOOL judge;
char TMRINT=0;
static NODE_INFO remote2;
static NODE_INFO remote3;
NODE_INFO remote1;
static IP_ADDR LocalIP;
IP_ADDR MailIP;
static WORD data1Count;
BYTE data1[MAX_ICMP_DATA_LEN];
static WORD ICMPid;
static WORD ICMPseq;
BYTE opCode;
TCP_SOCKET socket1;
TCP_SOCKET socket2;
char i=0;
char n=0;
unsigned char c[4]={192,168,23,98};
//unsigned char d[4]={192,168,23,98};
union
{
BYTE MACFrameType;
BYTE IPFrameType;
ICMP_CODE ICMPCode;
} type;
void emHint( );
#pragma code HighVector=0x08
void atHighVector ( )
{
_asm goto emHint _endasm
}
#pragma code
void basemode()
{
if(MACGetHeader(&remote2.MACAddr, &type.MACFrameType))
{
switch(type.MACFrameType)
{case MAC_ARP:
if(ARPGet(&remote2, &opCode))
{
if((opCode==ARP_REPLY)&&(remote3.IPAddr.Val==remote2.IPAddr.Val))
{
//putrsUSART("arpreceive\n");
MACDiscardRx();
}
else
{
//putrsUSART("arpdiscard\n");
MACDiscardRx();
}
if ( opCode == ARP_REQUEST )
{
while(!ARPIsTxReady());
ARPPut(&remote2,ARP_REPLY );
}
}
else
{
//putrsUSART("arpwrong\n");
}
MACDiscardRx();
break;
case MAC_IP:
if ( IPGetHeader(&LocalIP,&remote2,&type.IPFrameType,&data1Count) )
{
if ( type.IPFrameType == IP_PROT_ICMP )
{
if ( ICMPGet(&type.ICMPCode,data1,(BYTE*)&data1Count,&ICMPid,&ICMPseq) )
{
if ( type.ICMPCode == ICMP_ECHO_REQUEST )
{
//putrsUSART("ping\n");
ICMPPut(&remote2,ICMP_ECHO_REPLY,data1,data1Count,ICMPid,ICMPseq);
}
}
}
else if(type.IPFrameType == IP_PROT_TCP)
{
judge=TCPProcess(&remote2, data1Count);
/* if(judge==1)
{
if(n==0)
emDelHardTimer(1);
if(n==1)
emDelHardTimer(2);
}*/
}
}
MACDiscardRx();
break;
} //end switch
}//end if
else
{
judge=0;
}
// TCPtickout();
}
void TCPserver(TCP_SOCKET socket)
{
BYTE httpLength=0;
BYTE m,l=0;
BYTE RxData[40];
SOCKET_INFO* ps;
ps=&TCB[socket];
m=ps->RxCount;
if(TCPIsGetReady(socket))
{
while( TCPGet(socket, &RxData[httpLength++]) );
for(l=0;l<m;l++)
{
while(!TXSTAbits.TRMT);
putcUSART(*(RxData+l));
}
Nop();
}
}
void delaysecond(BYTE s)
{
BYTE c,d=0;
c=200*s;
for(d=0;d<c;d++)
{
DelayMs(5);
}
}
void TASK15()
{ char j=0;
TCPListen(800);
while(1)
{
basemode();
TCPserver(0);
}
}//end task0
void emHint( )
{
stemp=STATUS;
tbsr=BSR;
twag=WREG;
if(PIR1bits.TMR1IF==1)//允许定时器1中断处理,以启动硬件定时器
{
PIR1bits.TMR1IF=0;
TMR1H=Htimer1;
TMR1L=0;
mSeconds++;
emEinth;
}
if((INTCONbits.TMR0IF==1))
{
emSpch(RunID);
emSpcl(RunID);
tempRunID=RunID;
emSerTask();
TMR0H=Htimer0;
TMR0L=0;
emEtmr0;
emEinth;
emEintl;
if(tempRunID!=RunID)
{
STKPTR=3;
emWpth1(RunID);
emWptl1(RunID);
FSR1L=0x30;
}
}
BSR=tbsr;
WREG=twag;
STATUS=stemp;
}
void main()
{
IniPortA();
InitializeBoard();
MACInit();
TCPInit();
SocketInit();
emSysini();
//woEEinf();
emCreatTask(TASK15,15,15);//底层循环
//emSetHardTimer(0,4000);//用硬件定时器0,定时时间20秒
//emSetHardTimer(7,6000);
//emSetHardTimer(1,200);//用作socket0的超时处理
//emSetHardTimer(2,200);//用作socket1的超时处理
//emSetHardTimer(6,200);//用作默认socket建立连接
//emStartHardTimer(0);
//emStartHardTimer(7);
//emCreatSysMal();
//emCreatSem(4);
emStar();
//putrsUSART("START\n");
emSched1();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -