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

📄 appmain.cpp

📁 驱动设计文档
💻 CPP
字号:
#include <stdio.h>
#include <windows.h>
#include <assert.h>
#include "VNicComm.h"

#define SOCKPORT 3618
#define  NET_PACKET_MAX_LEN	1518

UCHAR	ReadBuf[NET_PACKET_MAX_LEN],WriteBuf[NET_PACKET_MAX_LEN];

VNicComm vnic;


#define  TEST_SEND_PACKET	1
#ifdef  TEST_SEND_PACKET

#define SENDLENGTH 	56
UCHAR pWriteBuf[SENDLENGTH] = {
		0x00,0x11,0x22,0x33,0x44,0x55,
		0x55,0x44,0x33,0x22,0x11,0x00,
		0x00,0x28,
		0xff,0xff,
		0x00,0x27,
		0x00,0x00,
		
		0x00,0x00,0x00,0x10,
		0x00,0x11,0x22,0x33,0x44,0x55,
		0x0e,0x22,
		
		0x00,0x00,0x00,0x10,
		0x55,0x44,0x33,0x22,0x11,0x00,
		0x0e,0x22,
		
		0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,
		
		0xb1,0x00,0x00
};
int main(int argc,char *argv[])
{
	int iret = 0;

	if (! vnic.VNOpen()){
		printf("can not open vnic !\n");
		return 0;
	}
	
	iret = vnic.VNWrite(pWriteBuf,SENDLENGTH);
	if (iret != SENDLENGTH)
	{
		printf("vnwrite is error !\n");
		return 0;
	}

	vnic.VNClose();
	
	printf("ok,end ...\n");
	return 0;
}

#else

//=========*******************************************************===========||||||

SOCKET hsock;
void InstanceThread(void *parg);

int main(int argc,char *argv[])
{
	WSADATA wsaData;
	int iRet;
	struct sockaddr_in sa_local,sa_remote;
	
	if (! vnic.VNOpen()){
		printf("can not open vnic !\n");
		return 0;
	}


	if (!(
			((argc == 3) && (*argv[1] == 's')) || 
			((argc == 4) && (*argv[1] == 'c'))
		 )
	   )
	{
		printf("\n arg example:\n\n");
		printf(" 服务类型 本地ip         远程ip \n\n");
		printf(" s        192.168.8.12   [没有远程ip] \n");
		printf(" c        192.168.8.11   192.168.8.12 \n\n");
		return 0;		
	}

	iRet = WSAStartup ( MAKEWORD ( 1,1 ), &wsaData );
	if ( iRet != 0) {
		return -1;
	}
	
	hsock = socket (AF_INET, SOCK_STREAM, 0); 
	if (hsock < 0)
		return 0;
	
	memset (&sa_local, '\0', sizeof(sa_local));
	sa_local.sin_family      = AF_INET;
	sa_local.sin_addr.s_addr = inet_addr(argv[2]);
	sa_local.sin_port        = htons (SOCKPORT);          
	
	iRet = bind(hsock, (struct sockaddr*) &sa_local,sizeof (sa_local)); 
	if (iRet < 0)
	{
		printf("socket bind ip[%s] error ! \n",argv[2]);
		return 0;
	}
	if (*argv[1] == 's') {
		//是服务端
		
		iRet = listen (hsock, 5);  
		if (iRet < 0)
			return 0;		
		
		iRet = sizeof(sa_remote);
		printf("等待连接!\n");
		hsock = accept (hsock, (struct sockaddr*) &sa_remote, &iRet);		
		if (hsock < 0)
			return 0;
		
		printf("连接成功!\n");
		
	} else {
		//是客户端
	
		memset (&sa_remote, '\0', sizeof(sa_remote));
		sa_remote.sin_family      = AF_INET;
		sa_remote.sin_addr.s_addr = inet_addr(argv[3]);
		sa_remote.sin_port        = htons (SOCKPORT);          
		
		puts("开始连接!");
		iRet = connect(hsock, (struct sockaddr*) &sa_remote,sizeof(sa_remote)); 
		if (iRet < 0) {
			puts("连接失败!");
			return 0;
		}
		
		
		printf("连接成功!\n");
		
	}

	//start thread
	
	
	DWORD dwThreadId; 
	HANDLE hThread;
	
	hThread = NULL;
	hThread = CreateThread( 
		NULL,              // no security attribute 
		0,                 // default stack size 
		(LPTHREAD_START_ROUTINE) InstanceThread, 
		NULL,				// thread parameter 
		0,                 // not suspended 
		&dwThreadId);      // returns thread ID 
	if (hThread == NULL) {
		printf(" thread is error !\n");
		return 1;
	}

	int iRecLength;

	for(;;) {	

		iRecLength = 0;
		if (recv(hsock,(char *)&iRecLength,4,0) != 4) {
			printf("recv socket length is error !\n");
			break;
		}
		if ((iRecLength <= 18) ||  (iRecLength > NET_PACKET_MAX_LEN)) {
			printf("recv socket data is error iRecLength [%d]!\n",iRecLength);
			break;
		}
		
		memset(WriteBuf,0,NET_PACKET_MAX_LEN);
		if (recv(hsock,(char *)WriteBuf,iRecLength,0) != iRecLength) {
			printf("recv socket ip packet is error !\n");
			break;
		}

		if (vnic.VNWrite(WriteBuf,iRecLength) != iRecLength) {
			printf("VNWrite is error !\n");
		} else
		{
			printf("vinc.VNWrite:\n");
			for (int i = 0; i < iRecLength; i ++)
			{
				if ((i % 12) == 0)
					printf("\n");
				printf("[%02x]",WriteBuf[i]);
			}
			printf("\n\n");
			//printf("VNWrite is ok !\n");
		}
	}

	vnic.VNClose();
	
	printf("end ...\n");

	return 0;
}

void InstanceThread(void *parg)
{
	int iRecLength;

	for (;;) {

		Sleep(500);

		memset(ReadBuf,0,NET_PACKET_MAX_LEN);
		iRecLength = vnic.VNRead(ReadBuf,NET_PACKET_MAX_LEN);
		if (iRecLength < 12)
			continue;

		if (send(hsock,(char *)&iRecLength,4,0) != 4) {			
			printf("send socket data  lenth is errro!\n");
			break;
		}
			
		if (send(hsock,(char *)ReadBuf,iRecLength,0) != iRecLength) {			
			printf("send socket data  is errro!\n");
			break;
		} else {
			printf("vinc.VNRead:\n");
			for (int i = 0; i < iRecLength; i ++)
			{
				if ((i % 12) == 0)
					printf("\n");
				printf("[%02x]",ReadBuf[i]);
			}
			printf("\n\n");
			//printf("send packet is ok !\n");
		}

	
	}

	printf("thread end ...\n");
}

#endif

⌨️ 快捷键说明

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