📄 transportunit.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#define BUFSIZE 256
#include "TransportUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "trayicon"
#pragma resource "*.dfm"
TMainForm *MainForm;
#define RSP_SIMPLE_SERVICE 1
#define RSP_UNREGISTER_SERVICE 0
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
ButtonStatus();
n=1;
Name="";
SavePath="";
OpenPath="";
OutSocket=NULL;
cansave=false;
btnSend->Enabled=false;
SendItem->Enabled=false;
TPowersock *Powersock1=new TPowersock(this);
LocalIPText->Caption=Powersock1->LocalIP; //获到本地IP地址
delete Powersock1;
hKernelLib = LoadLibrary("kernel32.dll");
if(hKernelLib)
{
RegisterServiceProcess =(pRegFunction)GetProcAddress(hKernelLib,"RegisterServiceProcess");
if(RegisterServiceProcess)
RegisterServiceProcess(GetCurrentProcessId(),RSP_SIMPLE_SERVICE);
}
}
//-----------------------------------------------------------------------------------------
__fastcall TMainForm::~TMainForm()
{
if(hKernelLib)
{
if(RegisterServiceProcess)
RegisterServiceProcess(GetCurrentProcessId(),RSP_UNREGISTER_SERVICE);
FreeLibrary(hKernelLib);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnLoadClick(TObject *Sender)
{
//MyFStream->Free();
if(OpenDialog->Execute())
{
OpenPath=OpenDialog->FileName;
Name=ExtractFileName(OpenPath);
SetColor("已[装载]文件:"+Name+",请按[发送]进行发送!",clNavy,10);
btnSend->Enabled=true;
SendItem->Enabled=false;
}
}
//---------------------------------------------------------------------------
void TMainForm::SendMsg(AnsiString Message) // send msg --all
{
if(isServer)
{
ServerSocket->Socket->Connections[0]->SendText(Message);
}
else if(ConnectStatus)
{
OutSocket->SendText(Message);
}
}
//--------------------------------------------------------------------------
void TMainForm::Systeminfo()
{
//
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnSendClick(TObject *Sender) // Send file
{
if(ConnectStatus||isServer)
{
if(Name.Length()!=0)
{
btnSend->Enabled=false;
SendItem->Enabled=false;
SendMsg("SendFile:`File`"+Name+"`");
SetColor("请求已[发送],等待对方[回应]!",clBlue,10);
}
else
{
MessageDlg("你还没有装载的文件!",mtError,TMsgDlgButtons()<<mbOK,0);
}
}
else
{
MessageDlg("网络已断开,请先连接再发送!",mtError,TMsgDlgButtons()<<mbOK,0);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnConnectClick(TObject *Sender) //connect to server
{
if(edtHost->Text.Length()!=0)
{
ClientSocket->Host=edtHost->Text;
ClientSocket->Port=6712;
ClientSocket->Open();
}
else
{
StatusBar->Panels->Items[0]->Text=" 请输入[服务端]IP地址";
}
}
//---------------------------------------------------------------------------
void TMainForm::ButtonStatus() //set buttons value
{
if(ConnectStatus)
{
btnConnect->Enabled=false;
btnDisconnect->Enabled=true;
btnListen->Enabled=false;
ConnectItem->Enabled=false;
DisConnectItem->Enabled=true;
}
else
{
btnConnect->Enabled=true;
btnDisconnect->Enabled=false;
btnListen->Enabled=true;
ConnectItem->Enabled=true;
DisConnectItem->Enabled=false;
}
if(cansave)
{
btnSave->Enabled=true;
RefuseItem->Enabled=true;
SaveItem->Enabled=true;
btnCancel->Enabled=true;
}
else
{
btnSave->Enabled=false;
RefuseItem->Enabled=false;
btnCancel->Enabled=false;
SaveItem->Enabled=false;
}
}
//-------------------------------------------------------------
void TMainForm::SetColor(AnsiString MsgToSet,TColor c,int Size)
{ //set color on which message diplay
int oldl;
oldl=MsgMemo->Text.Length();
MsgMemo->Lines->Add(MsgToSet);
MsgMemo->SelStart=oldl;
MsgMemo->SelLength=MsgToSet.Length();
MsgMemo->SelAttributes->Color=c;
MsgMemo->SelAttributes->Size=Size;
}
//------------------------------------------------------------------
void TMainForm::DisEnableConnect()
{
ConnectStatus=false;
ClientSocket->Close();
ButtonStatus();
}
//---------------------------------------------------------------------------
void Break(AnsiString sMeg,AnsiString sMeg1[],AnsiString mark) //Break the Re Message
{
int ml,v,i=0;
while(v=sMeg.AnsiPos(mark))
{
ml=mark.Length();
sMeg1[i]=sMeg.SubString(0,v-1);
sMeg.Delete(1,v-1+ml);
i++;
}
sMeg1[i++]=sMeg;
}
/*///////////////////////////////////////////////////////////////////////
File Stream unit
///////////////////////////////////////////////////////////////////////*/
void TMainForm::Send_File() //send file
{
AnsiString ip;
if(isServer) //set the host ip
{
ip=ClientIP;
}
else if(ConnectStatus)
{
ip=edtHost->Text;
}
Application->ProcessMessages();
TFileStream *MyFStream; //Create a stream
MyFStream = new TFileStream(OpenDialog->FileName, fmOpenRead);
try
{
NMStrm->Host=ip;
//NMStrm->FromName = Edit1->Text;
NMStrm->PostIt(MyFStream);
// NMStrm->SendStream(MyFStream);
}
catch(...)
{
}
MyFStream->Free();
}
//---------------------------------------------------------------------
void __fastcall TMainForm::btnDisconnectClick(TObject *Sender)// disconnect to server
{
DisEnableConnect();
}
//-------------------------------------------------------------
void __fastcall TMainForm::NMStrmConnect(TObject *Sender)
{
MsgMemo->Lines->Add("Connection Done");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmConnectionFailed(TObject *Sender)
{
MsgMemo->Lines->Add("Connection Failed");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmDisconnect(TObject *Sender)
{
MsgMemo->Lines->Add("Disconnect");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmHostResolved(TComponent *Sender)
{
MsgMemo->Lines->Add("Host Resolved");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmMessageSent(TObject *Sender)
{
MsgMemo->Lines->Add("File sent complete ");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmPacketSent(TObject *Sender)
{
MsgMemo->Lines->Add("BytesTotal:"+IntToStr((NMStrm->BytesTotal)/1024)+"K BytesReceived:"+IntToStr((NMStrm->BytesRecvd)/1024)+"K");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmStatus(TComponent *Sender,
AnsiString Status)
{
MsgMemo->Lines->Add(Status);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmInvalidHost(bool &Handled)
{
AnsiString NewHost;
if (InputQuery("Invalid Host", "Please Choose another host", NewHost))
{
NMStrm->Host = NewHost;
Handled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmServStatus(TComponent *Sender,
AnsiString Status)
{
MsgMemo->Lines->Add(Status);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmServClientContact(TObject *Sender)
{
MsgMemo->Lines->Add("Client Connected");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMStrmServMSG(TComponent *Sender, //receive Stream
const AnsiString sFrom, TStream *strm)
{
TFileStream *MyFStream;
MyFStream = new TFileStream(SavePath, fmCreate);
try
{
MyFStream->CopyFrom(strm, strm->Size);
}
catch(...)
{
}
MyFStream->Free();
}
//-------------------------------------------------------------------------------
/*/////////////////////////////////////////////////////////////////////////////
WinSocket unit
Client
//////////////////////////////////////////////////////////////////////////////*/
//--------------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocketConnect(TObject *Sender,
TCustomWinSocket *Socket) //connected to server success
{
StatusBar->Panels->Items[0]->Text=" 已连接上[服务端]";
ConnectStatus=true;
ButtonStatus();
OutSocket=Socket;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocketConnecting(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar->Panels->Items[0]->Text=" 正在连接[服务端]...";
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocketDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar->Panels->Items[0]->Text=" 断开与[服务端]连接";
DisEnableConnect();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
StatusBar->Panels->Items[0]->Text=" 通信接口错误,错误代码:"+IntToStr(ErrorCode);
DisEnableConnect();
ErrorCode=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -