📄 appmain.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 + -