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

📄 main.cpp

📁 主要用于http://www.doctorcom.com/开发的dr.com宽带记费系统
💻 CPP
字号:
#include"SocketObject.h"
#include"Thread.h"
#include<iostream>
#include<cstdio>
#include<fstream>
#include<vector>
#include<list>
#include<map>
#include<boost\regex.hpp>
using namespace std;
using namespace boost;

#pragma comment(lib,"ws2_32.lib")

#define BUFSIZE 10

typedef pair<string,void*> Pair;

typedef unsigned (*COMMAND)(string& command);



char fuckDRCOM[16]={'D','r','c','o',0xD2,0x20,0x70,0x01,0xE6,0x00,0xAC,0x1A,0x53,0x01,0xC2,0x0D};

//ofstream out("send.txt",ios_base::trunc);

//ofstream out2("recv.txt",ios_base::trunc);

string proxyaddr="172.26.83.216";

int proxyPort=7000;



unsigned __stdcall serverFunc(void* param);



unsigned __stdcall controlFunc(void* param);

unsigned __stdcall threadSourceCleanFunc(void* param);

unsigned __stdcall controlFunc(void* param);

unsigned help(string& param);

unsigned operateCom(string& com);

string getFuncName(string& com);

void initCom();

vector<string> getFuncParam(string& com);

map<string,void*> coms;

int main(int argc,char** argv)
{
	//regex expression("host: (.*?)\r\n",regbase::icase);
	//if(argc!=3)
	//{
	//	cout<<"参数错误"<<endl;
	//	return 0;
	//}

	//proxyaddr=argv[1];

	//proxyPort=atoi(argv[2]);
	cout<<"Fuck Dr.Com for freedom!"<<endl;
	initCom();
    SocketObject serverSock;
    serverSock.Create(AF::af_inet,SOCKTYPE::sock_stream,PROTOCAL::ipproto_ip);
flag:
	cout<<"输入本机绑定端口:"<<endl;
	int localPort=7000;
	cin>>localPort;
	if(!serverSock.Bind(localPort))
	{
		cout<<"端口绑定失败!"<<endl;
		goto flag;
	}
	cout<<"输入服务器IP:"<<endl;
	cin>>proxyaddr;
	cout<<"输入服务器端口:"<<endl;
	cin>>proxyPort;
	fflush(stdin);
	Thread controlThread(controlFunc,NULL);
	controlThread.ThreadStart();
	serverSock.Listen(100);
	while(true)
	{
		SocketObject* ieSock=new SocketObject();
	    if(serverSock.Accept(*ieSock))
		{
			
			Thread serverThread(serverFunc,(void*)ieSock);
			serverThread.ThreadStart();
			
		}
		
	}
	controlThread.Join();
	
}

unsigned __stdcall serverFunc(void* param)
{
	
	
	char buf[65535];
	SocketObject* ieSock=(SocketObject*)param;
	int len=0;
	len=ieSock->Recv(buf,sizeof(buf));
	SocketObject clientSock;
	clientSock.Create(AF::af_inet,SOCKTYPE::sock_stream,PROTOCAL::ipproto_ip);
	if(clientSock.Connect((char*)proxyaddr.c_str(),proxyPort))
	{
		//cout<<">连接成功!"<<endl;
	}
	else
	{
		cout<<">连接失败!"<<endl;
		delete ieSock;
		ieSock=NULL;
		return 0;
	}
	
	if(clientSock.Send(fuckDRCOM,sizeof(fuckDRCOM))<=0)
	{
		delete ieSock;
		ieSock=NULL;
		return 0;
	}
	if(clientSock.Send(buf,len)<=0)
	{
		delete ieSock;
		ieSock=NULL;
		return 0;
	}
	fd_set readSet;
	while(true)
	{
		
		FD_ZERO(&readSet);
		FD_SET(ieSock->skSocket,&readSet);
		FD_SET(clientSock.skSocket,&readSet);
		if(select(0,&readSet,NULL,NULL,NULL))
		{
			if(FD_ISSET(clientSock.skSocket,&readSet))
			{
				int len=clientSock.Recv(buf,sizeof(buf));
				if(len)
				{
					
					if(len>=4 && memcmp(fuckDRCOM,buf,4)==0)
					{
					}
					else
					{
						if(ieSock->Send(buf,len)<=0)
							break;
					}
						//cout.write(buf,len);
					
				}
				else
					break;
				
			}
			if(FD_ISSET(ieSock->skSocket,&readSet))
			{
				int len=ieSock->Recv(buf,sizeof(buf));
				if(len)
				{
					if(clientSock.Send(buf,len)<=0)
						break;
					//cout.write(buf,len);
					//cout<<"发送有用消息成功"<<endl;
					
				}
				else
					break;
				//cout<<"接收数据成功"<<endl;
			}
		}
	}
	delete ieSock;
	ieSock=NULL;
	return 0;
}


unsigned __stdcall threadSourceCleanFunc(void* param)
{
	//ThreadGroup* threadGroup=(ThreadGroup*) param;
	//Sourceshare lock;
	//lock.GetMutex(threadGroup->mutex);
	return 0;

}



unsigned __stdcall controlFunc(void* param)
{
	while(true)
	{
		string com;
		cout<<">";
		getline(cin,com);
		operateCom(com);
	}
	return 0;
}





unsigned help(string& param)
{
	cout<<"如发现问题请截图并描述一下发到xuhui122000@yahoo.con.cn"<<endl;
	cout<<"                                               by 徐晖"<<endl;
	return 0;
}

string getFuncName(string& com)
{
	regex expression("([^ ]+) *",regbase::icase);
	smatch matchStr;
	string::const_iterator beg=com.begin();
	string::const_iterator end=com.end();
	regex_search(beg,end,matchStr,expression);
	return matchStr[1].str();
}

vector<string> getFuncParam(string& com)
{
	vector<string> params;
	regex expression("[^ ]+ ([^ ]+) *",regbase::icase);
	//regex expression1("setPort ([~ ]*?) *",regbase::icase);
	smatch matchStr;
	string::const_iterator beg=com.begin();
	string::const_iterator end=com.end();
	regex_search(beg,end,matchStr,expression);
	params.push_back(matchStr[1].str());
	
	return params;

}

void initCom()
{
	//coms.insert(Pair("list",(void*)listUsers));
	//coms.insert(Pair("setPort",(void*)setPort));
	//coms.insert(Pair("setCapacity",(void*)setCapacity));
	coms.insert(Pair("help",(void*)help));
}

unsigned operateCom(string& com)
{
	map<string,void*>::const_iterator iter;
	//cout<<getFuncName(com)<<endl;
	iter=coms.find(getFuncName(com));
	if(iter==coms.end())
	{
		cout<<"错误的命令,请输入help查询帮助!"<<endl;
	}
	else
		((COMMAND)((*iter).second))(com);
	return 0;
}



⌨️ 快捷键说明

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