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

📄 unit1.cpp

📁 能模拟SGIP的网关模拟
💻 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 + -