?? eenet.cpp
字號(hào):
#include <stdio.h>
#include <conio.h>
#include "mytypes.h"
#include "ChnIFace.h"
int eENet(int port, IP_Addr addr =LOOPBACK);
char *CmdReady();
char *AddrStr(IP_Addr addr);
int CmdProc(char *pCmd);
int RecvProc(ChnIFace *pChn);
int eENetInit(ChnIFace *pChn, int port,IP_Addr addr=LOOPBACK);
int main(int argc, char *argv[])
{
int id;
if(argc == 1)
{
printf("用法: %s 網(wǎng)絡(luò)ID號(hào) (1~9,用于標(biāo)識(shí)該網(wǎng)絡(luò))\n",argv[0]);
return 0;
}
sscanf(argv[1],"%d",&id);
if(id < 0 || id>9)
{
printf("輸入?yún)?shù)錯(cuò)誤: %s\n",argv[1]);
return 0;
}
printf("Emulating Ethernet starting, NetID = %s\n", argv[1]);
eENet(3000+id);
return 0;
}
int eENet(int port,IP_Addr addr )
{
int More;
U32 LoopCnt;
U32 RecvCnt;
char *pCmd;
ChnIFace Chn;
if(eENetInit(&Chn,port) != 0)
return 0;
printf("Service Started at [%s @%d]\n", AddrStr(addr),port);
LoopCnt = 0;
RecvCnt = 0;
More = 1;
while(More)
{
if(Chn.RecvReady(10))
{
RecvProc(&Chn);
RecvCnt++;
}
if ( (pCmd=CmdReady()) )
{
More=CmdProc(pCmd);
}
LoopCnt++;
}
printf("Service terminated\n%ld loops, %ld PDU received.\n",LoopCnt,RecvCnt);
return 0;
}
int eENetInit(ChnIFace *pChn, int port,IP_Addr addr)
{
if(pChn->Open(IPPROTO_UDP) !=0)
return -1;
if(pChn->Bind(port) != 0)
return -1;
return 0;
}
char *CmdReady()
{
static char keys[80];
static int k=0;
int c;
if(!kbhit())
return NULL;
c = getche();
if (c != '\r')
{
keys[k++] = c;
return NULL;
}
keys[k]=0;
k=0;
if(strlen(keys))
return keys;
return NULL;
}
char *AddrStr(IP_Addr addr)
{
static char str[64];
sprintf(str,"%ld.%ld.%ld.%ld",addr>>24,(addr>>16)&0xff,(addr>>8)&0xff,addr&0xff);
return str;
}
int CmdProc(char *pCmd)
{
return strcmp(pCmd,"exit");
}
int RecvProc(ChnIFace *pChn)
{
char Buff[2000];
int Len;
U16 port;
Len = pChn->RecvFrom(Buff,2000, &port);
if(Len)
{
printf("Recvfrom %s@%d\n",AddrStr(pChn->GetPeerAddr()),port);
pChn->SendTo(Buff,Len,port);
}
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -