📄 unit1.cpp
字号:
else
RemoteAddr=ServerToIp(edRemote->Text.c_str());
if(RemoteAddr==INADDR_NONE)throw 1;
inaddr.s_addr=RemoteAddr;
asRemoteName=AnsiString(inet_ntoa(inaddr));
stbScan->Panels->Items[0]->Text =asRemoteName;
IsScan=true;
sockRemote.sin_family =AF_INET;
sockRemote.sin_addr.s_addr=RemoteAddr;
sockRemoteLen=sizeof(sockRemote);
for(int i=0;i<AddrBufferSize;i++)
skRemote[i]=INVALID_SOCKET;
for(int i=0;i<AddrBufferSize;i++)
{
skRemote[i]=socket(AF_INET,SOCK_STREAM,0);
if(skRemote[i]==INVALID_SOCKET)break;
sockRemote.sin_port =htons(NowScanPort);
if(WSAAsyncSelect(skRemote[i],Handle,WM_ADDRREADY,FD_CONNECT)==SOCKET_ERROR||(connect(skRemote[i],(sockaddr*)&sockRemote,sockRemoteLen)==SOCKET_ERROR&&WSAGetLastError()!=WSAEWOULDBLOCK))
{closesocket(skRemote[i]);skRemote[i]=INVALID_SOCKET;break;}
else
portRemote[i]=NowScanPort++;
if(NowScanPort>TotalScanPort)break;
}
stbScan->Panels->Items[1]->Text=NowScanPort;
lbScan->Items->Clear();
sbStartScan->Enabled =false;
sbEndScan->Enabled=true;
}
catch(...)
{
ShowMessage("无法获取本机IP!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForLover::AddrReady(TMessage& Msg)
{
//TODO: Add your source code here
static SOCKET skNow;
static int skIndex;
skNow=(SOCKET)Msg.WParam;
for(skIndex=0;skIndex<AddrBufferSize;skIndex++)
if(skRemote[skIndex]==skNow)break;
if(skIndex>=AddrBufferSize)return;
if(WSAGETSELECTERROR(Msg.LParam))
{
switch(WSAGETSELECTERROR(Msg.LParam))
{
case WSAECONNREFUSED:
closesocket((SOCKET)Msg.WParam);
skRemote[skIndex]=INVALID_SOCKET;
if(NowScanPort>TotalScanPort)break;
skRemote[skIndex]=socket(AF_INET,SOCK_STREAM,0);
if(skRemote[skIndex]==INVALID_SOCKET)break;
sockRemote.sin_port=htons(NowScanPort);
if(WSAAsyncSelect(skRemote[skIndex],Handle,WM_ADDRREADY,FD_CONNECT)==SOCKET_ERROR||(connect(skRemote[skIndex],(sockaddr*)&sockRemote,sockRemoteLen)==SOCKET_ERROR&&WSAGetLastError()!=WSAEWOULDBLOCK))
{
closesocket(skRemote[skIndex]);
skRemote[skIndex]=INVALID_SOCKET;
}
else
portRemote[skIndex]=NowScanPort++;
stbScan->Panels->Items[1]->Text=NowScanPort;
break;
case WSAENETUNREACH:
closesocket((SOCKET)Msg.WParam);
skRemote[skIndex]=INVALID_SOCKET;
stbScan->Panels->Items[0]->Text="无法访问网络!";
break;
default:
closesocket((SOCKET)Msg.WParam);
skRemote[skIndex]=INVALID_SOCKET;
stbScan->Panels->Items[0]->Text="未知的网络错误!";
break;
}
CheckEnd();
return;
}
lbScan->Items->Add(AnsiString("IP:")+asRemoteName+"端口:"+portRemote[skIndex]+"开放!");
closesocket((SOCKET)Msg.WParam);
skRemote[skIndex]=INVALID_SOCKET;
if(NowScanPort>TotalScanPort)
{
CheckEnd();
return;
}
skRemote[skIndex]=socket(AF_INET,SOCK_STREAM,0);
if(skRemote[skIndex]==INVALID_SOCKET)return;
sockRemote.sin_port=htons(NowScanPort);
if(WSAAsyncSelect(skRemote[skIndex],Handle,WM_ADDRREADY,FD_CONNECT)==SOCKET_ERROR||(connect(skRemote[skIndex],(sockaddr*)&sockRemote,sockRemoteLen)==SOCKET_ERROR&&WSAGetLastError()!=WSAEWOULDBLOCK))
{
closesocket(skRemote[skIndex]);
skRemote[skIndex]=INVALID_SOCKET;
}
else
portRemote[skIndex]=NowScanPort++;
stbScan->Panels->Items[1]->Text=NowScanPort;
CheckEnd();
}
void __fastcall TForLover::sbEndScanClick(TObject *Sender)
{
for(int i=0;i<AddrBufferSize;i++)
{
if(skRemote[i]!=INVALID_SOCKET)closesocket(skRemote[i]);
skRemote[i]=INVALID_SOCKET;
}
sbStartScan->Enabled=true;
sbEndScan->Enabled=false;
stbScan->Panels->Items[0]->Text="扫描结束!";
stbScan->Panels->Items[1]->Text=0;
IsScan=false;
}
//---------------------------------------------------------------------------
//已经结束返回true;
bool __fastcall TForLover::CheckEnd(void)
{
static int i;
for(i=0;i<AddrBufferSize;i++)
{
if(skRemote[i]!=INVALID_SOCKET)break;
}
if(i<AddrBufferSize)return false;
sbStartScan->Enabled=true;
sbEndScan->Enabled=false;
stbScan->Panels->Items[0]->Text="扫描结束!";
stbScan->Panels->Items[1]->Text=0;
IsScan=false;
return true;
}
void __fastcall TForLover::N1Click(TObject *Sender)
{
Application->Restore();
ShowWindow(Application->Handle,SW_RESTORE);
SetForegroundWindow(Application->Handle);
}
//---------------------------------------------------------------------------
void __fastcall TForLover::N3Click(TObject *Sender)
{
N1Click(NULL);
TComponent*tempCom=dynamic_cast<TComponent*>(Sender);
if(tempCom==NULL)return;
//switch(tempCom->Tag)
PCControl->ActivePageIndex =tempCom->Tag;
}
//---------------------------------------------------------------------------
void __fastcall TForLover::N9Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForLover::BitBtn1Click(TObject *Sender)
{
//UDP
#define UdpNum 256
HINSTANCE hInst=LoadLibrary("iphlpapi.dll");
GGetUdpTable GetUdp;
DWORD dwSize=sizeof(MIB_UDPROW)*UdpNum+sizeof(DWORD);
char* cTmp=new char[dwSize];
TListItem*list;
in_addr inaddr;
AnsiString asState;
ZeroMemory(cTmp,dwSize);
PMIB_UDPTABLE pUdp=(PMIB_UDPTABLE)cTmp;
try
{
if(hInst==NULL)
throw 1;
GetUdp=(GGetUdpTable)GetProcAddress(hInst,"GetUdpTable");
if(GetUdp==NULL)
throw 2;
if(GetUdp(pUdp,&dwSize,FALSE))
{
delete[]cTmp;
cTmp=new char[dwSize];
pUdp=(PMIB_UDPTABLE)cTmp;
if(GetUdp(pUdp,&dwSize,FALSE))throw 3;
}
for(DWORD i=0;i<pUdp->dwNumEntries;i++)
{
list=LVTable->Items->Add();
inaddr.s_addr=pUdp->table[i].dwLocalAddr;
list->Caption=AnsiString(inet_ntoa(inaddr));
list->SubItems->Add(ntohs(pUdp->table[i].dwLocalPort));
list->SubItems->Add("--------");
list->SubItems->Add("--------");
list->SubItems->Add("--------");
}
TListItem*nlist=LVTable->Items->Add();
nlist->Caption =AnsiString::StringOfChar('-',list->Caption.Length());
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[0].Length()));
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[1].Length()));
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[2].Length()));
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[3].Length()));
}
catch(int Error)
{
switch(Error)
{
case 1:MessageBox(Handle,"无法装载IpHlpApi.dll\n可能系统的版本太低!","",MB_OK|MB_ICONINFORMATION);
case 2:MessageBox(Handle,"无法取出IpHlpApi.dll中的函数地址\n可能系统的版本太低!","",MB_OK|MB_ICONINFORMATION);
default:
list=LVTable->Items->Add();
list->Caption ="--------";
list->SubItems->Add("------");
list->SubItems->Add("--------");
list->SubItems->Add("------");
list->SubItems->Add("------");
}
}
delete[]cTmp;
if(hInst)FreeLibrary(hInst);
//
}
//---------------------------------------------------------------------------
void __fastcall TForLover::BitBtn2Click(TObject *Sender)
{
//TCP
#define TcpNum 256
HINSTANCE hInst=LoadLibrary("iphlpapi.dll");
GGetTcpTable GetTcp;
DWORD dwSize=sizeof(MIB_TCPROW)*TcpNum+sizeof(DWORD);
char* cTmp=new char[dwSize];
TListItem*list;
in_addr inaddr;
AnsiString asState;
ZeroMemory(cTmp,dwSize);
PMIB_TCPTABLE pTcp=(PMIB_TCPTABLE)cTmp;
try
{
if(hInst==NULL)
throw 1;
GetTcp=(GGetTcpTable)GetProcAddress(hInst,"GetTcpTable");
if(GetTcp==NULL)
throw 2;
if(GetTcp(pTcp,&dwSize,FALSE))
{
delete[]cTmp;
cTmp=new char[dwSize];
pTcp=(PMIB_TCPTABLE)cTmp;
if(GetTcp(pTcp,&dwSize,FALSE))throw 3;
}
for(DWORD i=0;i<pTcp->dwNumEntries;i++)
{
list=LVTable->Items->Add();
inaddr.s_addr=pTcp->table[i].dwLocalAddr;
list->Caption=AnsiString(inet_ntoa(inaddr));
list->SubItems->Add(ntohs(pTcp->table[i].dwLocalPort));
if(pTcp->table[i].dwState==MIB_TCP_STATE_ESTAB)
{
inaddr.s_addr=pTcp->table[i].dwRemoteAddr;
list->SubItems->Add(inet_ntoa(inaddr));
list->SubItems->Add(ntohs(pTcp->table[i].dwRemotePort));
}
else
{
list->SubItems->Add("------");
list->SubItems->Add("------");
}
switch(pTcp->table[i].dwState)
{
case MIB_TCP_STATE_CLOSED:asState="已关闭";break;
case MIB_TCP_STATE_CLOSING:asState="正在关闭";break;
case MIB_TCP_STATE_CLOSE_WAIT:asState="等待关闭";break;
case MIB_TCP_STATE_DELETE_TCB:asState="删除";break;
case MIB_TCP_STATE_ESTAB:asState="已连接";break;
case MIB_TCP_STATE_FIN_WAIT1:asState="第一次握手";break;
case MIB_TCP_STATE_FIN_WAIT2:asState="第二次握手";break;
case MIB_TCP_STATE_LAST_ACK:asState="最后确认";break;
case MIB_TCP_STATE_LISTEN:asState="监听...";break;
case MIB_TCP_STATE_SYN_RCVD:asState="同步接收";break;
case MIB_TCP_STATE_SYN_SENT:asState="同步发送";break;
case MIB_TCP_STATE_TIME_WAIT:asState="超时等待";break;
default:asState="未知状态";break;
}
list->SubItems->Add(asState);
}
TListItem*nlist=LVTable->Items->Add();
nlist->Caption =AnsiString::StringOfChar('-',list->Caption.Length());
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[0].Length()));
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[1].Length()));
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[2].Length()));
nlist->SubItems->Add(AnsiString::StringOfChar('-',list->SubItems->Strings[3].Length()));
}
catch(int Error)
{
switch(Error)
{
case 1:MessageBox(Handle,"无法装载IpHlpApi.dll\n可能系统的版本太低!","",MB_OK|MB_ICONINFORMATION);
case 2:MessageBox(Handle,"无法取出IpHlpApi.dll中的函数地址\n可能系统的版本太低!","",MB_OK|MB_ICONINFORMATION);
default:
list=LVTable->Items->Add();
list->Caption ="--------";
list->SubItems->Add("------");
list->SubItems->Add("--------");
list->SubItems->Add("------");
list->SubItems->Add("------");
}
}
delete[]cTmp;
if(hInst)FreeLibrary(hInst);
//TCP
}
//---------------------------------------------------------------------------
void __fastcall TForLover::BitBtn3Click(TObject *Sender)
{
BitBtn1->Enabled =false;
BitBtn2->Enabled =false;
LVTable->Items->Clear();
BitBtn1->Enabled =true;
BitBtn2->Enabled =true;
}
//---------------------------------------------------------------------------
/*检查是否连入网络*/
BOOL __fastcall TForLover::CheckNet(void)
{
DWORD dwFlag;
if(InternetGetConnectedState(&dwFlag,0)==FALSE)
{
DefDialName=(CBDialList->Text=="系统默认连接");
if(DefDialName)
return InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE,Handle);
else
return !InternetDial(Handle,CBDialList->Text.c_str(),INTERNET_AUTODIAL_FORCE_ONLINE,&DialNumber,0);
}
return TRUE;
}
void __fastcall TForLover::CBDialListDropDown(TObject *Sender)
{
/*CBDialList->Items->Clear();
int BufferNUm=10;
DWORD EntryNum,
EntryBuffSize=sizeof(RASENTRYNAME)*BufferNUm,
ReturnValue;
char* szEntryBuffer=new char[EntryBuffSize];
RASENTRYNAME *pRas=(RASENTRYNAME*)szEntryBuffer;
ZeroMemory(szEntryBuffer,EntryBuffSize);
pRas[0].dwSize=sizeof(RASENTRYNAME);
EntryNum=10;
try
{
ReturnValue=RasEnumEntries(NULL,NULL,pRas,&EntryBuffSize,&EntryNum);
if(ReturnValue)
{
RasGetErrorString(ReturnValue,szEntryBuffer,200);
ShowMessage(szEntryBuffer);
throw 1;
}
CBDialList->Items->Add("默认连接");
for(int j=0;j<EntryNum;j++)
CBDialList->Items->Add(pRas[j].szEntryName);
}
catch(...){}
if(szEntryBuffer)delete[]szEntryBuffer;*/
}
//---------------------------------------------------------------------------
/* delete[]szEntryBuffer;
szEntryBuffer=new char[EntryBuffSize];
if(szEntryBuffer==NULL)throw;
ZeroMemory(szEntryBuffer,EntryBuffSize);
pRas=(RASENTRYNAME*)szEntryBuffer;
BufferNUm=EntryBuffSize/sizeof(RASENTRYNAME);
for(int i=0;i<BufferNUm;i++)
pRas[i].dwSize=sizeof(RASENTRYNAME);
if(RasEnumEntries(NULL,NULL,pRas,&EntryBuffSize,&EntryNum))throw 1;*/
BOOL __fastcall TForLover::NetHanup()
{
if(RBNone->Checked)return TRUE;
DWORD dwFlag;
if(InternetGetConnectedState(&dwFlag,0))
{
if(DefDialName)
return InternetAutodialHangup(0);
else
return !InternetHangUp(DialNumber,0);
}
return TRUE;
}
void __fastcall TForLover::Timer3Timer(TObject *Sender)
{
static int imgIndex;
imgIndex=TBConnect->ImageIndex;
imgIndex++;
if(imgIndex>66)imgIndex=64;
TBConnect->ImageIndex=imgIndex;
}
//---------------------------------------------------------------------------
void __fastcall TForLover::GClient1ButtonClick(TObject *Sender)
{
TToolButton*tempComponent=dynamic_cast<TToolButton*>(Sender);
if(tempComponent->Tag<=0)return;
AnsiString asTemp="呢称:"+tempComponent->Caption+",ID:"+tempComponent->Tag;
AnsiString asText=InputBox("说悄悄话",AnsiString("请输入要对")+asTemp+"说的话:","");
if(asText=="")return;
GClient1->Write(asText.c_str(),asText.Length(),tempComponent->Tag);
//
}
//---------------------------------------------------------------------------
void __fastcall TForLover::TBConnectClick(TObject *Sender)
{
POINT pt;
//GetCursorPos(&pt);
pt.x=TBConnect->Left+TBConnect->Width/2;
pt.y=TBConnect->Top +TBConnect->Height;
::ClientToScreen(ToolBarClient->Handle,&pt);
PMConnect->Popup(pt.x,pt.y);
}
//---------------------------------------------------------------------------
void __fastcall TForLover::T1Click(TObject *Sender)
{
PToolBar->Align =(TAlign)alTop;
T1->Checked =true;
}
//---------------------------------------------------------------------------
void __fastcall TForLover::B1Click(TObject *Sender)
{
PToolBar->Align =(TAlign)alBottom;
B1->Checked =true;
}
//---------------------------------------------------------------------------
#define IGNORELEN 30
void __fastcall TForLover::ToolBarClientResize(TObject *Sender)
{
BRightSide->Visible=((ToolBarClient->Left+ToolBarClient->Width)>(PToolBar->Width+IGNORELEN));
}
//---------------------------------------------------------------------------
void __fastcall TForLover::BRightSideClick(TObject *Sender)
{
static int PartMove=ToolBarClient->ButtonWidth;
ToolBarClient->Left =ToolBarClient->Left -PartMove;
BRightSide->Visible =((ToolBarClient->Left+ToolBarClient->Width)>PToolBar->Width+IGNORELEN);
BLeftSide->Visible=(ToolBarClient->Left <-IGNORELEN);
}
//---------------------------------------------------------------------------
void __fastcall TForLover::BLeftSideClick(TObject *Sender)
{
static int PartMove=ToolBarClient->ButtonWidth;
ToolBarClient->Left =ToolBarClient->Left +PartMove;
BRightSide->Visible =((ToolBarClient->Left+ToolBarClient->Width)>PToolBar->Width+IGNORELEN);
BLeftSide->Visible=(ToolBarClient->Left <-IGNORELEN);
}
//---------------------------------------------------------------------------
void __fastcall TForLover::PToolBarResize(TObject *Sender)
{
//
ToolBarClient->Left =-2;
BLeftSide->Visible =false;
BRightSide->Visible =(ToolBarClient->Width>(PToolBar->Width+IGNORELEN));
}
//---------------------------------------------------------------------------
void __fastcall TForLover::B2Click(TObject *Sender)
{
if(cdColor->Execute())
GClient1->Color =cdColor->Color;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -