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

📄 service.cpp

📁 该部分就是是eenet的服务端!模拟以太网协议的实现部分。
💻 CPP
字号:
#include <stdio.h>
#include <conio.h>
#include "mytypes.h"
#include "mysock.h"

int Service(SOCKET s, int port, u_long addr);
int main(int argc, char *argv[])
{
	SOCKET s;
	int id;
	if(argc == 1)
	{
		printf("Usage: %s ID\n",argv[0]);
		return 0;
	}
	sscanf(argv[1],"%d",&id);
	if( id < 0 || id >9)
	{
		printf("%s out of range [1..9]\n",argv[1]);
		return 0;
	}
	s = OpenSocket(IPPROTO_UDP);
	if(s == INVALID_SOCKET)
		SockErrMsg();
	Service(s,3000+id,0x7f000001);
	return 0;
}

int Service(SOCKET s, int port, u_long addr)
{
	SockAddr sa;
	char Buff[2000];
	char keys[80];
	int Len;
	int More = 1;
	U32 c0,c1;
	int k;
	int i;
	
	
	sa.port = port;
	sa.addr = addr;
	if(Bind(s,&sa) == SOCKET_ERROR)
		SockErrMsg();
	printf("Service Started at[%ld.%ld.%ld.%ld,%d]\n", addr >> 24, (addr >> 16) & 0xff,(addr>>8)&0xff,addr&0xff,port); 
	c0=0;
	c1=0;
	i=0;
	while(More)
	{
		++c1;
		Len = RecvFrom(s,Buff,2000,&sa,10);
		if(Len)
		{
			printf("[Rcv %ld]from %ld.%ld.%ld.%ld,%d\n",c0,sa.addr >>24, (sa.addr>>16)&0xff,(sa.addr>>8)&0xff,sa.addr&0xff,sa.port);
			SendTo(s,Buff,Len,&sa);
			++c0;
		}
		if(kbhit())
		{
			k = getche();
			if(k =='\r')
			{
				keys[i]=0;
				if(strcmp(keys,"exit") == 0)
					More = 0;
				i=0;
			}
			else
				keys[i++] = k;
		}
	}
	printf("Service terminated\n%ld turns, %ld PDU received.\n",c1,c0);
	return 0;
}

⌨️ 快捷键说明

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