⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eenet.cpp

📁 利用socket编程实现对以太网的模拟!
💻 CPP
字号:
#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 网络ID号  (1~9,用于标识该网络)\n",argv[0]);
		return 0;
	}
	sscanf(argv[1],"%d",&id);
	if(id < 0 || id>9)
	{
		printf("输入参数错误: %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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -