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

📄 unit1.cpp

📁 网络极速寻呼源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit1.h"
#include <mmsystem.h>
#include "Unit2.h"
char xinming[]="姓名",
     xinbie[]="性别",
     hutai[]="呼台",
     taihao[]="台号",
     haoma[]="号码",
     jixin[]="机型",
     dianhua[]="电话",
     oicq[]="Oicq",
     dizhi[]="地址",
     zmingcheng[]="名称",
     zdizhi[]="地址",
     zduankou[]="端口",
	 zmima[]="密码",
	 zmiaoshu[]="描述";
int NetSize=933888;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GServer"
#pragma link "GServer"
#pragma link "GClient"
#pragma resource "*.dfm"
extern in_addr LocalAddr();
extern unsigned long LocalIp();
extern unsigned long ServerToIp(char*);
TForLover *ForLover;
extern void GAnimateForm(TForm*);
typedef DWORD WINAPI (*GGetTcpTable)(PMIB_TCPTABLE,PDWORD,BOOL);
typedef DWORD WINAPI (*GGetUdpTable)(PMIB_UDPTABLE,PDWORD,BOOL);
//---------------------------------------------------------------------------
DWORD WINAPI CallThread(LPVOID lp)
{
PQCALLINFO pqai=(PQCALLINFO)lp;
int recvSize,ret;
GSocket *csk1=new GSocket();
int repeatTime=0;
AnsiString asServer=ForLover->cbServer->Text,
			  asServerCode=ForLover->cbServerCode->Text,
			  asCallNum=ForLover->edCallNum->Text;
while(repeatTime++<pqai->AutoRetryTime)
{
try
{
ForLover->mmStatus->Lines->Add(AnsiString("呼叫:")+asServer+":"+asServerCode+":"+asCallNum);
if(csk1->Create()==false)throw 0;
ForLover->mmStatus->Lines->Add("正在连接服务器......");
ret=csk1->Connect(pqai->Host,pqai->Port,pqai->CTimeOut);
if(ret==SOCKET_ERROR)throw 1;
else if(ret==GSOCKET_NOHOST)throw 2;
else if(ret==0)throw 3;
ForLover->mmStatus->Lines->Strings[ForLover->mmStatus->Lines->Count-1]=("正在连接......已连接");
ForLover->mmStatus->Lines->Add(AnsiString("正在发送数据")+pqai->Len+"字节......");
if(csk1->Send(pqai->Text,pqai->Len,pqai->STimeOut)!=pqai->Len)
	ForLover->mmStatus->Lines->Strings[ForLover->mmStatus->Lines->Count-1]=(AnsiString("正在发送数据")+pqai->Len+"字节......:未发送所有数据");
else
	ForLover->mmStatus->Lines->Strings[ForLover->mmStatus->Lines->Count-1]=(AnsiString("正在发送数据")+pqai->Len+"字节......:已发送所有数据");
ForLover->mmStatus->Lines->Add("等待服务器响应......");
recvSize=csk1->Receive(pqai->Reply,2048,pqai->WTimeOut);
if(recvSize<=0)throw 4;
pqai->Reply[recvSize]='\0';
ForLover->mmStatus->Lines->Strings[ForLover->mmStatus->Lines->Count-1]=AnsiString("等待服务器响应......服务器回应:");
ForLover->mmStatus->Lines->Add(pqai->Reply);
if(pqai->isAsp)
{
recvSize=csk1->Receive(pqai->Reply,2048,pqai->WTimeOut);
if(recvSize<=0)break;
pqai->Reply[recvSize]='\0';
ForLover->mmStatus->Lines->Add(pqai->Reply);
}
break;
}
catch(int Error)
{
switch(Error)
{
case 0:ForLover->mmStatus->Lines->Add("无法初始化连接!");break;
case 1:ForLover->mmStatus->Lines->Add("连接失败!无效的主机地址!");break;
case 2:ForLover->mmStatus->Lines->Add("无法访问该服务器!可能是未连入网络或服务器不存在!");break;
case 3:ForLover->mmStatus->Lines->Add("无法在指定时间内连接到服务器!");break;
case 4:ForLover->mmStatus->Lines->Add("无法得到服务器的回应!");
}
}
catch(...){}
if(repeatTime>=pqai->AutoRetryTime)break;
ForLover->mmStatus->Lines->Add(AnsiString("呼叫失败!自动重试第")+repeatTime+"次!");
}
csk1->Close();
delete csk1;
delete[]pqai->Reply;
delete[]pqai->Text;
ForLover->bbtCall->Enabled=true;
ForLover->CBAutoRetry->Enabled =true;
ForLover->EDAutoRetry->Enabled =true;
ForLover->EDCTimeOut->Enabled =true;
ForLover->EDWTimeOut->Enabled =true;
ForLover->EDSTimeOut->Enabled =true;
if(ForLover->RBCallEnd->Checked&&ForLover->NetHanup()==FALSE)
	MessageBox(NULL,"警告:无法断开拨号连接!","警告",MB_OK|MB_ICONERROR);
return 1;
}
__fastcall TForLover::TForLover(TComponent* Owner)
	: TForm(Owner)
{
DialNumber=0;
DefDialName=true;
IsScan=false;
IsMini=false;
bbtCall->Hint ="单击发送信息!\n   快试试!";
ZeroMemory(&fi,sizeof(fi));
lpFileName=new char[512];
lpHFileName=new char[512];
InfoDat=new char[512];
OtherDat=new char[512];
char*szFile=new char[512];
CBDialList->Items->Add("系统默认连接");
CBDialList->Text="系统默认连接";
try{
ZeroMemory(szFile,512);
for(int i=GetModuleFileName(HInstance,szFile,511);i>=3;i--)
{
	if(szFile[i]=='\\')
    {
     szFile[i+1]='\0';
     strcpy(lpFileName,szFile);
     strcat(lpFileName,"朋友.dat");
     strcpy(lpHFileName,szFile);
     strcat(lpHFileName,"主机.dat");
     strcpy(InfoDat,szFile);
     strcat(InfoDat,"网络时代.dat");
     strcpy(OtherDat,szFile);
     strcat(OtherDat,"其它.dat");
	 break;
	 }
}
GetModuleFileName(HInstance,szFile,511);
FILE*fp=fopen(szFile,"rb");
if(fp)
{
 fseek(fp,0,SEEK_END);
 if(ftell(fp)!=NetSize&&MessageBox(Handle,"程序文件被改变(由于病毒或其它原因),可能会导致程序无法正常运行!\r\n要继续运行程序吗?","警告",MB_YESNO|MB_ICONQUESTION)==ID_NO)
	{
		fclose(fp);
		ExitProcess(0);
	}
 fclose(fp);
}
}
catch(...)
{
lpFileName[0]='\0';
lpHFileName[0]='\0';
InfoDat[0]='\0';
OtherDat[0]='\0';
}
delete[]szFile;
slServerCode=new TStringList;
slServerAll=new TStringList;
cbName->Items->Clear();
try{
cbName->Items->LoadFromFile(OtherDat);
}
catch(...)
{cbName->Items->Add("朱");
cbName->Items->Add("耿");
cbName->Items->Add("王");
cbName->Items->Add("胡");
}
FILE*fp=fopen(InfoDat,"rb");
if(fp)
{
fseek(fp,0,SEEK_END);
if(ftell(fp)==(int)sizeof(fi))
{
fseek(fp,0,SEEK_SET);
fread(&fi,sizeof(fi),1,fp);
cbProxy->Checked=fi.proxy.Enabled;
edProxyAdd->Text=AnsiString(fi.proxy.Host);
edProxyPort->Text=AnsiString(fi.proxy.Port);
edWelcome->Text =AnsiString(fi.SWelcome);
edSPassword->Text=AnsiString(fi.SPassword);
edSPort->Text=AnsiString(fi.SPort);
cbServerImidiate->Checked =fi.imidiate ;
cbServerLeave->Checked =fi.ServerLeave;
cbServerConnect->Checked =fi.ServerConnect;
cbClientSay->Checked=fi.ClientSay;
CBDialList->Text=fi.DialName;
switch(fi.AutoHanup)
{
 case 0:RBCallEnd->Checked =true;break;
 case 1:RBProgEnd->Checked =true;break;
 default:RBNone->Checked=true;break;
}
if(fi.ToolAlign)T1Click(NULL);
else B1Click(NULL);

CBAutoRetry->Checked =fi.AutoRetry;
EDCTimeOut->Text =fi.CTimeOut;
EDWTimeOut->Text =fi.WTimeOut;
EDAutoRetry->Text =fi.AutoRetryTime;
EDSTimeOut->Text =fi.STimeOut;
GClient1->Color =(TColor)fi.ClientColor;
}
}
else
{
 fi.imidiate =true;
 fi.ServerConnect =true;
 fi.ServerLeave =true;
 fi.CFace =48;
 fi.Max =false;
 strcpy(fi.CName,"---");
 strcpy(fi.CPort,"80");
 strcpy(fi.CPassword,"NetTime");
 fi.AutoHanup =1;
 fi.AutoRetry=true;
 fi.CTimeOut =8;
 fi.WTimeOut =8;
 fi.STimeOut=8;
 fi.AutoRetryTime =5;
}
if(fp)fclose(fp);
if(fi.Max)WindowState=(TWindowState)wsMaximized;
cbType->ItemIndex =0;
acbServerCode->ItemIndex =0;
cbName->ItemIndex =0;
cbSex->ItemIndex =0;
acbSex->ItemIndex =0;
acbCallType->ItemIndex=0;
GetAllUsers();
GetAllServers();
Application->OnMinimize =Mini;
kickId=0;
}
bool TForLover::AddIcon()
{
	notify.hIcon =hicon[curIcon];
	return   Shell_NotifyIcon(NIM_ADD,&notify);
}
bool TForLover::DelIcon()
{
 notify.hIcon =hicon[curIcon];
 return Shell_NotifyIcon(NIM_DELETE,&notify);
}
bool TForLover::ModIcon()
{
 curIcon++;
 if(curIcon>=4)curIcon=0;
 Icon->Handle=hicon[curIcon];
 notify.hIcon =hicon[curIcon];
 return Shell_NotifyIcon(NIM_MODIFY,&notify);
}
//---------------------------------------------------------------------------
void _fastcall TForLover::HandleIcon(TMessage&msg)
{
if(msg.LParam==WM_LBUTTONDBLCLK)
{
	 if(IsMini)
	 {
		 Application->Restore();
		ShowWindow(Application->Handle,SW_RESTORE);
		 SetForegroundWindow(Application->Handle);
		 IsMini=false;
	 }
	else
	{
		Application->Minimize();
		ShowWindow(Application->Handle,SW_HIDE);
		IsMini=true;
	}
}
else if(msg.LParam==WM_RBUTTONUP)
{
 POINT pt;
 ::GetCursorPos(&pt);
 pmMenu->Popup(pt.x,pt.y);
}
}
void __fastcall TForLover::bbtCallClick(TObject *Sender)
{
if(cbProxy->Checked&&edProxyAdd->Text.Length()==0){MessageBox(NULL,"无效的代理设置!","",MB_OK);return;}
edCallNum->Text =edCallNum->Text.Trim();
cbName->Text=cbName->Text.Trim();
mmWord->Text =mmWord->Text.Trim();
cbSex->Text=cbSex->Text.Trim();
if((edCallNum->Text.Length()==0)||(cbName->Text.Length()==0)||(cbSex->Text.Length()==0)||(mmWord->Text.Length()==0))
{
	MessageBox(NULL,"请填满所有内容!","错误",MB_OK);
	return;
}
mmStatus->Clear();
bbtCall->Enabled=false;
CBAutoRetry->Enabled =false;
EDAutoRetry->Enabled =false;
EDCTimeOut->Enabled =false;
EDWTimeOut->Enabled =false;
EDSTimeOut->Enabled =false;
mmWord->ReadOnly=true;
try{
if(edPassWord->Text.Length()==0)edPassWord->Text ="null";
qai.Len=SetParams();
if(qai.Len==0)throw 1;
qai.Text=szHead;
qai.Reply=szReply;
qai.AutoRetry =CBAutoRetry->Checked;
if(qai.AutoRetry)
{
try{qai.AutoRetryTime =EDAutoRetry->Text.ToInt();}
catch(...){ShowMessage("自动重试次数的设置无效!\n将自动重试5次!");qai.AutoRetryTime =5;}
}
try{qai.CTimeOut=EDCTimeOut->Text.ToInt();if(qai.CTimeOut<=0||qai.CTimeOut>=50)throw 1;}
catch(...){ShowMessage("连接超时的设置无效!\n自动设为8秒!");qai.CTimeOut=8;}
try{qai.STimeOut=EDSTimeOut->Text.ToInt();if(qai.STimeOut<=0||qai.STimeOut>=50)throw 1;}
catch(...){ShowMessage("发送超时的设置无效!\n自动设为8秒!");qai.STimeOut=8;}
try{qai.WTimeOut=EDWTimeOut->Text.ToInt();if(qai.WTimeOut<=0||qai.WTimeOut>=50)throw 1;}
catch(...){ShowMessage("等待超时的设置无效!\n自动设为8秒!");qai.WTimeOut=8;}
fi.proxy.Enabled =cbProxy->Checked;
if(fi.proxy.Enabled)
{
strcpy(fi.proxy.Host,edProxyAdd->Text.c_str());
strcpy(fi.proxy.Port,edProxyPort->Text.c_str());
qai.Host=fi.proxy.Host;
int i=CheckPort(edProxyPort);
if(i==-1){MessageBox(NULL,"代理端口号必须是1-65535之间的数字!","提醒",MB_OK|MB_ICONINFORMATION);throw 2;}
else
qai.Port=(u_short)i;
}
else
{
qai.Host=asCallHost.c_str();
qai.Port=80;
}
if(CheckNet()==FALSE)throw 3;
/*以下创建呼叫线程*/
DWORD dwThreadId;
HANDLE hThread=CreateThread(NULL,0,CallThread,(LPVOID)&qai,0,&dwThreadId);
if(hThread==NULL)
	{MessageBox(NULL,"创建呼叫线程失败!","失败",MB_OK);throw 2;}
else 
	CloseHandle(hThread);
}
catch(int Err)
{	
	bbtCall->Enabled=true;
	CBAutoRetry->Enabled =true;
	EDAutoRetry->Enabled =true;
	EDCTimeOut->Enabled =true;
	EDWTimeOut->Enabled =true;
	EDSTimeOut->Enabled =true;
	if(Err!=1)
		{delete[]szReply;delete[]szHead;}
}
if(cbName->Items->IndexOf(cbName->Text)==-1)cbName->Items->Insert(0,cbName->Text);
if(cbSex->Items->IndexOf(cbSex->Text)==-1)cbSex->Items->Insert(0,cbSex->Text);
mmWord->ReadOnly=false;
}
//---------------------------------------------------------------------------

int TForLover::SetParams()
{
int index,MsgSize;
AnsiString astemp,
			  asString,
			  asPostHost;
char Temp[10];
szHead=new char[BufferSize*2];
szMsg=new char[BufferSize];
szReply=new char[2049];
try
	{
	ZeroMemory(szMsg,BufferSize);
	ZeroMemory(szHead,BufferSize*2);
	ZeroMemory(szReply,2049);
	ZeroMemory(Temp,10);

	index=slServerAll->IndexOf(cbServer->Items->Strings[cbServer->ItemIndex].Trim()+"##");
	if(index==-1)throw;
	astemp=slServerAll->Strings[index+1];
	asCallHost=slServerAll->Strings[index+2];
	asPostHost=slServerAll->Strings[index+3];
	asString=slServerAll->Strings[index+4+cbType->ItemIndex+cbSex->ItemIndex*2];
	if(astemp=="1")
	sprintf(szMsg,asString.c_str(),
					edCallNum->Text.c_str(),
					slServerCode->Strings[cbServerCode->ItemIndex].Trim().c_str(),
					cbName->Text.c_str(),
					mmWord->Text.c_str(),
					edPassWord->Text.c_str()
					);
	else if(astemp=="2")
		sprintf(szMsg,asString.c_str(),
					edCallNum->Text.c_str(),
					slServerCode->Strings[cbServerCode->ItemIndex].Trim().c_str(),
					cbName->Text.c_str(),
					mmWord->Text.c_str()
					);
	else if(astemp=="3")
		sprintf(szMsg,asString.c_str(),
					edCallNum->Text.c_str(),
					slServerCode->Strings[cbServerCode->ItemIndex].Trim().c_str(),
					cbName->Text.c_str(),
					mmWord->Text.c_str(),
					edPassWord->Text.c_str()
					);
	else if(astemp=="4")
		sprintf(szMsg,asString.c_str(),
					edCallNum->Text.c_str(),
					slServerCode->Strings[cbServerCode->ItemIndex].Trim().c_str(),
					cbName->Text.c_str(),
					mmWord->Text.c_str()
					);
	strcpy(szHead,"POST ");
	strcat(szHead,asPostHost.c_str());
	strcat(szHead," HTTP/1.1\r\n");
	strcat(szHead,"Accept: application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg,\
	 image/pjpeg, */*\r\n");
	strcat(szHead,"Accept-Language: zh-cn\r\n");
	strcat(szHead,"Content-Type: application/x-www-form-urlencoded\r\n");
	strcat(szHead,"Accept-Encoding: gzip, deflate\r\n");
	strcat(szHead,"User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)\r\n");
	strcat(szHead,"Host: ");
	strcat(szHead,asCallHost.c_str());
	strcat(szHead,"\r\n");
	strcat(szHead,"Connection: Keep-Alive\r\n");
	qai.isAsp =(astemp=="1"||astemp=="2");
	strcat(szHead,"Content-Length: ");
	MsgSize=strlen(szMsg);
	itoa(MsgSize,Temp,10);
	strcat(szHead,Temp);
	strcat(szHead,"\r\n\r\n");
	strcat(szHead,szMsg);
	}
catch(...)
{
	delete[]szMsg;
	delete[]szHead;
	delete[]szReply;
	MessageBox(NULL,"未知的错误!","错误",MB_OK);
	return 0;
}
delete[]szMsg;
return strlen(szHead);
}

void __fastcall TForLover::cbServerClick(TObject *Sender)
{
int index,pos;
static int icount=slServerAll->Count;
if(icount==0)return;
AnsiString EqualChar="$";
AnsiString KuoChar="[";
AnsiString EndChar="$$$$";
AnsiString astemp=KuoChar+cbServer->Items->Strings[cbServer->ItemIndex].Trim()+"]";
index=slServerAll->IndexOf(astemp);
if(index==-1)return;
cbServerCode->Items->Clear();
slServerCode->Clear();
for(index+=1;index<icount;index++)
{
astemp=slServerAll->Strings[index];
if(astemp==EndChar)break;
pos=astemp.Pos(EqualChar);
cbServerCode->Items->Add(astemp.SubString(1,pos-1));
slServerCode->Add(astemp.SubString(pos+1,astemp.Length()-pos));
}
cbServerCode->ItemIndex=0;
index=slServerAll->IndexOf(cbServer->Items->Strings[cbServer->ItemIndex]+"##");
if(index==-1)return;
astemp=slServerAll->Strings[index+1];

⌨️ 快捷键说明

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