📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
sequence = 0;
counter = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString recv_text;
recv_text = Socket->ReceiveText();
if(recv_text.Length()!= 0) counter++;
//Memo1->Lines->Add(counter);
//Memo1->Lines->Add(recv_text);
Sleep(StrToInt(ComboBox1->Text));
recv(recv_text);
}
//---------------------------------------------------------------------------
void TForm1::recv(AnsiString data)
{
char *p, *q;
p = data.c_str();
q = p;
p += 20;
Memo1->Lines->Add(alternate(((_SGIP_HEAD *)q)->Sequence_Number[2]));
if(((_SGIP_HEAD *)q)->Command_ID == alternate(SGIP_BIND))
{
additem(alternate(((_SGIP_HEAD *)q)->Sequence_Number[2]),StrToInt((IntToHex(alternate(((_SGIP_HEAD *)q)->Command_ID),8))),"绑定信息",21);
sequence = alternate(((_SGIP_HEAD *)q)->Sequence_Number[2]);
Bind_Resp();
}
else if(((_SGIP_HEAD *)q)->Command_ID == alternate(SGIP_UNBIND))
{
additem(alternate(((_SGIP_HEAD *)q)->Sequence_Number[2]),StrToInt((IntToHex(alternate(((_SGIP_HEAD *)q)->Command_ID),8))),"解除绑定信息",23);
sequence = ((_SGIP_HEAD *)q)->Sequence_Number[2];
UnBind_Resp();
}
else if(((_SGIP_HEAD *)q)->Command_ID == alternate(SGIP_SUBMIT))
{
additem(alternate(((_SGIP_HEAD *)q)->Sequence_Number[2]),StrToInt((IntToHex(alternate(((_SGIP_HEAD *)q)->Command_ID),8))),"submit信息",22);
sequence = ((_SGIP_HEAD *)q)->Sequence_Number[2];
sequence = alternate(sequence);
Submit_Resp();
}
else if(((_SGIP_HEAD *)q)->Command_ID == alternate(SGIP_DELIVER_RESP))
{
//ShowMessage("Deliver Response");
additem(alternate(((_SGIP_HEAD *)q)->Sequence_Number[2]),StrToInt((IntToHex(alternate(((_SGIP_HEAD *)q)->Command_ID),8))),"deliver信息",25);
}
}
void __fastcall TForm1::Submit_Resp()
{
head(SGIP_SUBMIT_RESP,sizeof(_SGIP_SUBMIT_RESP));
char bind_data[70];
sgip_submit_resp.Result = 0;
memcpy(bind_data,(char*)&sgip_head,sizeof(sgip_head));
memcpy(bind_data+sizeof(sgip_head),(char*)&sgip_submit_resp,sizeof(sgip_submit_resp));
ServerSocket1->Socket->Connections[0]->SendBuf(bind_data,sizeof(sgip_head)+sizeof(sgip_submit_resp));
}
void __fastcall TForm1::UnBind_Resp()
{
head(SGIP_UNBIND_RESP,sizeof(_SGIP_UNBIND_RESP));
char bind_data[70];
memcpy(bind_data,(char*)&sgip_head,sizeof(sgip_head));
ServerSocket1->Socket->Connections[0]->SendBuf(bind_data,sizeof(sgip_head));
}
void __fastcall TForm1::Bind_Resp() //绑定bind
{
head(SGIP_BIND_RESP,sizeof(_SGIP_BIND_RESP));
char bind_data[70];
sgip_bind_resp.Result = 0;
memcpy(bind_data,(char*)&sgip_head,sizeof(sgip_head));
memcpy(bind_data+sizeof(sgip_head),(char*)&sgip_bind_resp,sizeof(sgip_bind_resp));
ServerSocket1->Socket->Connections[0]->SendBuf(bind_data,sizeof(sgip_head)+sizeof(sgip_bind_resp));
}
void __fastcall TForm1::Deliver()
{
char bind_data[200];
memcpy(sgip_deliver.UserNumber,"8613651160001",13);
memcpy(sgip_deliver.SPNumber,"10036",5);
sgip_deliver.TP_pid = 0;
sgip_deliver.TP_udhi = 0;
sgip_deliver.MessageCoding = 8;
sgip_deliver.MessageLength = 6;
sgip_deliver.MessageContent = "叶飞江";
head(SGIP_DELIVER, 57+sgip_deliver.MessageContent.Length());
memcpy(bind_data, (char*)&sgip_head, sizeof(sgip_head));
memcpy(bind_data+20,(char*)&sgip_deliver,49);
memcpy(bind_data+20+49,sgip_deliver.MessageContent.c_str(),sgip_deliver.MessageContent.Length());
memset(bind_data+20+49+sgip_deliver.MessageContent.Length(),'\0',8);
//ShowMessage(sizeof(sgip_deliver));
ClientSocket1->Socket->SendBuf(bind_data,sizeof(sgip_head)+57+sgip_deliver.MessageContent.Length());
}
void TForm1::head(int command_type,int length) //消息头的定义,每次调用序列号加一
{
//TODO: Add your source code here
sgip_head.Message_Length = sizeof(sgip_head)+length;
sgip_head.Message_Length = alternate(sgip_head.Message_Length);
sgip_head.Command_ID = command_type;
sgip_head.Command_ID = alternate(sgip_head.Command_ID);
sgip_head.Sequence_Number[0] = 10036;
sgip_head.Sequence_Number[0] = alternate(sgip_head.Sequence_Number[0]);
TDateTime now;
now = now.CurrentDateTime();
sgip_head.Sequence_Number[1] = StrToInt(now.FormatString("mmddhhmmss"));
sgip_head.Sequence_Number[1] = alternate(sgip_head.Sequence_Number[1]);
sgip_head.Sequence_Number[2] = sequence;
sgip_head.Sequence_Number[2] = alternate(sgip_head.Sequence_Number[2]);
if(sequence==INT_MAX)
{
sequence=0;
}
else
{
sequence++;
}
}
int TForm1::alternate(int input)
{
//TODO: Add your source code here
char *p;
int b;
p = (char*)&input;
swap(p,(p+3));
swap((p+1),(p+2));
b = *(int*)(p);
return b;
}
void TForm1::swap(char * a, char * b)
{
//TODO: Add your source code here
char temp;
temp = *a;
*a = *b;
*b = temp;
}
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
//StatusBar1->Panels->Items[0]->Text = "Connect from : " + Socket->RemoteAddress;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Connect1Click(TObject *Sender)
{
if(Connect1->Checked == false)
{
Connect1->Checked = true;
if (InputQuery("Connect to:", "Please input server address", Server))
{
if(Server.Length() > 0)
{
ClientSocket1->Host = Server;
ClientSocket1->Port = StrToInt(Edit1->Text);
ClientSocket1->Active = true;
}
}
}
else
{
ClientSocket1->Active = false;
Connect1->Checked = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
// Deliver();
//StatusBar1->Panels->Items[0]->Text = "Connect to : " + Socket->RemoteAddress;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Deliver();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ShowMessage("Connect server error");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(!ServerSocket1->Active)
{
ServerSocket1->Port = StrToInt(Edit2->Text);
ServerSocket1->Active = true;
Button2->Caption = "关闭网关";
Memo1->Lines->Add("网关已启动 √");
}
else
{
ServerSocket1->Port = StrToInt(Edit2->Text);
ServerSocket1->Active = false;
Button2->Caption = "开启网关";
Memo1->Lines->Add("网关已关闭 x");
}
}
//---------------------------------------------------------------------------
TForm1::bind()
{
//TODO: Add your source code here
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char bind_data[100];
bind();
sgip_bind.Login_Type = SGIP_BIND;
memset(sgip_bind.Login_Name,'\3',16);
memset(sgip_bind.Login_Password,'\7',16);
memset(sgip_bind.Reserve,'\0',8);
head(SGIP_BIND,sizeof(_SGIP_BIND));
memcpy(bind_data,(char*)&sgip_head, sizeof(sgip_head));
memcpy(bind_data+20,(char*)&sgip_bind,sizeof(_SGIP_BIND));
//ShowMessage(IntToStr(sizeof(sgip_head)+sizeof(_SGIP_BIND)));
ClientSocket1->Socket->SendBuf(bind_data,sizeof(sgip_head)+sizeof(_SGIP_BIND));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
//
recv(Socket->ReceiveText());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
ServerSocket1->Active = false;
Sleep(100);
ServerSocket1->Active = true;
}
//---------------------------------------------------------------------------
void TForm1::additem(int id, int command, AnsiString content, int index)
{
//--
TListItem *padd = ListView1->Items->Add();
padd->SubItems->Add(IntToStr(id));
padd->SubItems->Add(IntToStr(command));
padd->SubItems->Add(content);
padd->ImageIndex = index;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -