Setelah lama mencari di Internet, saya tidak menemukan contoh SGip. Saya sedih dan akhirnya membuat contoh SGIP untuk Delphi6.0.
Berisi server dan klien, protokolnya dibagikan, server adalah koneksi panjang yang tidak memblokir, dan klien adalah koneksi pendek yang memblokir.
Programnya sangat berantakan dan gayanya sangat buruk. Saya harap para ahli dapat memberi saya nasihat.
([email protected],[email protected])
file://klien
unit TesUtama;
antarmuka
kegunaan
Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir,
Dialog, ScktComp, StdCtrls, ExtCtrls, xy, winock;
konstanta
FV_SNumber=3053112345;
FV_LoginPass='hai';
FV_LoginName='hai';
FV_SPNomor='12345';
T_Tel='13000000000';
FV_corpID='12345';
T_msg='Aku menulis namamu di langit dan tidak terbawa angin';
jenis
TForm1 = kelas(TForm)
Memo1: TMemo;
Tombol1: Tombol T;
ClientSocket1: TClientSocket;
Tombol3: Tombol T;
Tombol4: Tombol T;
Tombol2: Tombol T;
Tombol5: Tombol T;
Tombol6: Tombol T;
Tombol7: Tombol;
ServerSocket1: TServerSocket;
panel1: TPanel;
Prosedur Button2Click(Pengirim: TObject);
prosedur Button1Click(Pengirim: TObject);
prosedur Button6Click(Pengirim: TObject);
prosedur Button5Click(Pengirim: TObject);
prosedur Button3Click(Pengirim: TObject);
prosedur Button4Click(Pengirim: TObject);
prosedur ClientSocket1Read(Pengirim: TObject; Socket: TCustomWinSocket);
prosedur Button7Click(Pengirim: TObject);
prosedur ServerSocket1ClientRead(Pengirim: TObject;
Soket: TCustomWinSocket);
pribadi
{Deklarasi pribadi}
publik
{Pernyataan publik}
file://definisi protokol klien
sHead: SGIHead; file://Definisi header pesan
sBind: XBind; file://verifikasi permintaan koneksi
sBind_Resp: Bind_Resp; file://Respon terhadap verifikasi permintaan koneksi
sKirim: XKirim; file://SP->SMG kirim SMS
sSubmit_Resp: Submit_Resp; file://SMG merespon status SMS yang dikirimkan oleh SP
sDeliver: XDeliver; file://SMG->SP kirimkan SMS
sDeliver_Resp: Deliver_Resp; file://SP merespons status SMS yang dikirimkan oleh SMG
sReport: XReport; file://SMG->SP status SMS sebelumnya
sReport_Resp: Report_Resp; file://Respon status eksekusi perintah
file://definisi protokol server
cHead: SGIHead; file://Definisi header pesan
cBind: XBind; file://verifikasi permintaan koneksi
cBind_Resp: Bind_Resp; file://Respon terhadap verifikasi permintaan koneksi
cKirim: XKirim; file://SP->SMG kirimkan SMS
cSubmit_Resp: Submit_Resp; file://SMG merespon status SMS yang dikirimkan oleh SP
cDeliver: XDeliver; file://SMG->SP kirimkan SMS
cDeliver_Resp: Deliver_Resp; file://SP merespons status SMS yang dikirimkan oleh SMG
cReport: XReport; file://SMG->SP status SMS sebelumnya
cReport_Resp: Report_Resp; file://Respon status eksekusi perintah
akhir;
var
Formulir1: TForm1;
pelaksanaan
{$R *.dfm}
prosedur TForm1.Button2Click(Pengirim: TObject);
mulai
ClientSocket1.Aktif:=salah;
jika ClientSocket1.Active maka
memo1.Lines.Add('Penonaktifan klien gagal')
kalau tidak
memo1.Lines.Add('Klien berhasil ditutup');
akhir;
prosedur TForm1.Button1Click(Pengirim: TObject);
mulai
ClientSocket1.Aktif:=benar;
jika ClientSocket1.Active maka
memo1.Lines.Add('Klien berhasil dibuka')
kalau tidak
memo1.Lines.Add('Pembukaan klien gagal');
akhir;
prosedur TForm1.Button6Click(Pengirim: TObject);
mulai
ServerSocket1.Aktif:=benar;
jika ServerSocket1.Active maka
memo1.Lines.Add('Server berhasil dibuka')
kalau tidak
memo1.Lines.Add('Pembukaan server gagal');
akhir;
prosedur TForm1.Button5Click(Pengirim: TObject);
mulai
ServerSocket1.Aktif:=salah;
jika ServerSocket1.Active maka
memo1.Lines.Add('Server gagal dimatikan')
kalau tidak
memo1.Lines.Add('Server berhasil ditutup');
akhir;
prosedur TForm1.Button3Click(Pengirim: TObject);
var
FV_Date1_S,FV_Date2_S: tali;
str_i,UkuranKirim:integer;
aliran1:TWinSocketStream;
abc,bc:kata panjang;
mulai
stream1:=TWinSocketStream.Create(ClientSocket1.Socket,30000);
memo1.Lines.Add('-------------------Kirim permintaan BIND ke server------------------ --');
jika bukan ClientSocket1.Active maka
mulai
memo1.Lines.Add('Klien tidak terbuka');
KELUAR;
akhir;
DateTimeToString(FV_Date1_S,'mmddhhnnss',sekarang);
DateTimeToString(FV_Date2_S,'zzz',sekarang);
FillChar(sBind,ukuran(sBind),0);
FillChar(Kepala,Ukuran(Kepala),0);
str_i:=ukuran(sHead)+ukuran(sBind);
sBind.LonginType:=1;
strpcopy(sBind.LonginPass,FV_LoginPass);
strpcopy(sBind.LonginName,FV_LoginName);
abc:=htonl(FV_SNumber);
sHead.Panjang Pesan:=htonl(str_i);
sHead.CommandId:=htonl(SGIP_Bind);
sHead.SNumber1:=abc;
sHead.SNumber2:=htonl(StrToInt(FV_Date1_S));
sHead.SNumber3:=htonl(StrToInt(FV_Date2_S));
stream1.WriteBuffer(sHead,sizeof(sHead));
stream1.WriteBuffer(sBind,sizeof(sBind));
memo1.Lines.Add('sHead.MessageLength '+inttostr(ntohl(sHead.MessageLength)));
memo1.Lines.Add('sHead.CommandId '+inttostr(ntohl(sHead.CommandId)));
bc:=ntohl(abc);
memo1.Lines.Add('sHead.SNumber1 '+inttostr(bc));
memo1.Lines.Add('sHead.SNumber2 '+inttostr(ntohl(sHead.SNumber2)));
memo1.Lines.Add('sHead.SNumber3 '+inttostr(ntohl(sHead.SNumber3)));
memo1.Lines.Add('sBind.LonginType '+inttostr(sBind.LonginType));
memo1.Lines.Add('sBind.LonginName '+sBind.LonginName);
memo1.Lines.Add('sBind.LonginPass '+sBind.LonginPass);
memo1.Lines.Add('------------------Permintaan pengikatan telah dikirim----------------------------------- ------ -');
jika stream1.WaitForData(5000) lalu
mulai
fillchar(cHead,ukuran(cHead),0);
fillchar(cbind_resp,sizeof(cBind_Resp),0);
stream1.ReadBuffer(cHead,sizeof(cHead));
stream1.ReadBuffer(cBind_resp,sizeof(cBind_resp));
akhir;
memo1.Lines.Add('cHead.MessageLength '+inttostr(ntohl(cHead.MessageLength)));
bc:=ntohl(cHead.CommandId);
memo1.Lines.Add('cHead.CommandId '+inttostr(bc));
bc:=ntohl(cHead.SNumber1);
memo1.Lines.Add('cHead.SNumber1 '+inttostr(bc));
memo1.Lines.Add('cHead.SNumber2 '+inttostr(ntohl(cHead.SNumber2)));
memo1.Lines.Add('cHead.SNumber3 '+inttostr(ntohl(cHead.SNumber3)));
memo1.Lines.Add('cBind.LonginType '+inttostr(cBind_resp.Result));
stream1.Gratis;
akhir;
prosedur TForm1.Button4Click(Pengirim: TObject);
file://tipe
{abc=catatan yang dikemas
kepala: SGI Kepala;
kirim:xKirim;
akhir;}
var
FV_Date1_S,FV_Date2_S: tali;
i,Ukuran Kirim: bilangan bulat;
berkas://xxx:abc;
aliran2: aliran soket kembar;
abc,bc:kata panjang;
baris1,baris2:kata panjang;
mulai
stream2:=twinsocketstream.Create(clientsocket1.Socket,5000);
Ukuran Kirim:=0;
memo1.Lines.Add('-------------------------kirim----------------- ---------');
jika bukan ClientSocket1.Active maka
mulai
memo1.Lines.Add('------------------Klien tidak terbuka, pengiriman gagal-------------');
KELUAR;
akhir;
DateTimeToString(FV_Date1_S,'mmddhhnnss',sekarang);
DateTimeToString(FV_Date2_S,'zzz',sekarang);
FillChar(sKirim,ukuran(sKirim),0);
FillChar(Kepala,Ukuran(Kepala),0);
dengan ssubmit lakukan
mulai
strpcopy(Nomor SP,'4488');//;
Nomor Tagihan :='8613188890924';
Jumlah Pengguna :=1; file://1-100
{untuk i:=1 hingga UserCount lakukan
mulai
file://strpcopy(UserNumber[i-1].TelN,'8613065073355');//+T_Tel);// :array TelCount; file://length adalah UserCount
Nomor Pengguna[i-1].TelN:='8613011725853';
akhir;}
Nomor Pengguna:='8613188890924';
CorpID:='41027';//CorpID:='4488';//strpcopy(CorpID,FV_corpID);
Tipe Layanan:='4488';//FV_SPNomor);//'4488';
Jenis Biaya :=1;
Nilai Biaya :='0';
Nilai yang Diberikan :='0';
Bendera Agen :=0;
LEBIH berhubungan dengan MTFlag :=2;
Prioritas :=0;
Waktu Kedaluwarsa :='';
JadwalWaktu :='';
Bendera Laporan :=1;
TP_pid :=0;
tp_udhi :=0;
Pengkodean Pesan :=15;
Tipe Pesan :=0;
Panjang Pesan :=htonl(161);
strpcopy(MessageContent,T_msg); file://length adalah Panjang Pesan;
file://Reservasi :='';
akhir;
{line1:=sizeof(sHead);
baris2:=ukuran(sKirim);}
dengan sHead lakukan
mulai
abc:=htonl(FV_SNumber);
Panjang Pesan:=htonl(sizeof(sHead)+sizeof(sSubmit)-3);
CommandId:=htonl(SGIP_Submit);
Nomor1:=abc;
Nomor2:=htonl(StrToInt(FV_Date1_S));
Nomor3:=htonl(StrToInt(FV_Date2_S));
akhir;
baris1:=stream2.Write(shead,sizeof(shead));
baris2:=stream2.Write(sSubmit,sizeof(sSubmit)-3);
jika stream2.WaitForData(5000) lalu
mulai
fillchar(cHead,ukuran(cHead),0);
fillchar(cSubmit_Resp,sizeof(cSubmit_Resp),0);
memo1.Lines.Add('baca kirim Kepala............');
mencoba
stream2.ReadBuffer(cHead,sizeof(cHead));
stream2.ReadBuffer(cSubmit_Resp,sizeof(cSubmit_Resp));
kecuali
di e: pengecualian lakukan
memo1.Lines.Add(e.Message);
akhir;
memo1.Lines.Add('baca kirim csubmit_resp ............');
file://stream2.ReadBuffer(cBind_Resp,sizeof(cBind_resp));
akhir;
stream2.Gratis;
akhir;
procedure TForm1.ClientSocket1Read(Pengirim: TObject;
Soket: TCustomWinSocket);
var
commandI,Ukuran Paket:Kata Panjang;
Recv1I,Recv2I:integer;
mulai
FillChar(Kepala,Ukuran(Kepala),0);
FillChar(sBind,ukuran(sBind),0);
Recv1I:=socket.ReceiveBuf(sHead,sizeof(sHead));
commandI:=ntohl(sHead.CommandId);
Ukuran Paket:=ntohl(sHead.MessageLength);
jika commandI=SGIP_UNBIND_RESP maka
mulai
memo1.Lines.Add('------------------Menerima permintaan SGIP_UNBIND_RESP------------------');
KELUAR;
akhir;
Recv2I:=socket.ReceiveBuf(sBind,sizeof(sBind));
jika commandI=SGIP_BIND_RESP maka
memo1.Lines.Add('---------------------SGIP_BIND_RESP------------------')
kalau tidak
jika commandI=SGIP_SUBMIT_RESP maka
memo1.Lines.Add('---------------------SGIP_SUBMIT_RESP-------------')
kalau tidak
memo1.Lines.Add('---------------------'+inttostr(commandI)+'------------- - ---');
memo1.Lines.Add('MessageLength '+inttostr(ntohl(sHead.MessageLength)));
memo1.Lines.Add('CommandId '+inttostr(commandI));
memo1.Lines.Add('SNumber '+inttostr(ntohl(sHead.SNumber1))+' '+
inttostr(ntohl(sHead.SNumber2))+' '+inttostr(ntohl(sHead.SNumber3)));
memo1.Lines.Add('Hasil '+inttostr(sBind_Resp.Hasil));
memo1.Lines.add('------------------akhir SGIP_UNBIND_RESP-------------------');
akhir;
prosedur TForm1.Button7Click(Pengirim: TObject);
var
FV_Date1_S,FV_Date2_S: tali;
stream3:TWinSocketStream;
mulai
Stream3:=TWinSocketStream.Create(clientSocket1.Socket,5000);
memo1.Lines.Add('-------------------Kirim permintaan UnBIND ke server------------------ --');
jika bukan ClientSocket1.Active maka
mulai
memo1.Lines.Add('Klien tidak terbuka');
stream3.gratis;
KELUAR;
akhir;
DateTimeToString(FV_Date1_S,'mmddhhnnss',sekarang);
DateTimeToString(FV_Date2_S,'zzz',sekarang);
FillChar(Kepala,Ukuran(Kepala),0);
sHead.Panjang Pesan:=htonl(sizeof(sHead));
sHead.CommandId:=htonl(SGIP_UNBIND);
sHead.SNumber1:=htonl(FV_SNumber);
sHead.SNumber2:=htonl(StrToInt(FV_Date1_S));
sHead.SNumber3:=htonl(StrToInt(FV_Date2_S));
stream3.Write(sHead,20);
FillChar(Kepala,20,0);
jika stream3.WaitForData(5000) lalu
mulai
stream3.ReadBuffer(sHead,20);
akhir;
stream3.Gratis;
akhir;
prosedur TForm1.ServerSocket1ClientRead(Pengirim: TObject;
Soket: TCustomWinSocket);
var
RecvSize1,RecvSize2,DeSize:integer;
commandI,Ukuran Pesan:Kata Panjang;
mulai
Ukuran Penerimaan1:=0;
Ukuran Penerimaan2:=0;
FillChar(cHead,SizeOf(cHead),0);
RecvSize1:=socket.ReceiveBuf(cHead,SizeOf(cHead));
commandI:=ntohl(cHead.CommandId);
Ukuran Pesan:=ntohl(cHead.MessageLength);
jika commandI=SGIP_BIND maka
mulai
memo1.Lines.Add('************************Permintaan Pengikatan yang Diterima**************** *****');
FillChar(cBind,Ukuran(cBind),0);
FillChar(cBind_Resp,SizeOf(cBind_Resp),0);
RecvSize2:=Socket.ReceiveBuf(cBind,MessageSize-RecvSize1);
jika (RecvSize2+RecvSize1)<>MessageSize lalu
mulai
memo1.Lines.Add('**********************kesalahan penerimaan data pengikatan***************** ***** **');
KELUAR;
akhir;
UkuranRecv2:=0;UkuranRecv1:=0;
cHead.CommandId:=htonl(SGIP_BIND_RESP);
cHead.Panjang Pesan:=htonl(sizeof(cHead)+sizeof(cBind_Resp));
cBind_Resp.Hasil:=0;
RecvSize1:=Socket.SendBuf(cHead,SizeOf(cHead));
RecvSize2:=Socket.SendBuf(cBind_Resp,SizeOf(cBind_Resp));
jika (RecvSize1+RecvSize2)<>ntohl(cHead.MessageLength) maka
mulai
memo1.Lines.Add('************************Kesalahan dalam menanggapi permintaan pengikatan************* ********* ******');
KELUAR;
akhir;
akhir
kalau tidak
jika commandI=SGIP_DELIVER maka
mulai
memo1.Lines.Add('************************Menerima permintaan SGIP_DELIVER****************** ******** *');
DeUkuran:=Ukuran(cDeliver);
FillChar(cDeliver,SizeOf(cDeliver),0);
FillChar(cDeliver_Resp,SizeOf(cDeliver_Resp),0);
RecvSize2:=Socket.ReceiveBuf(cDeliver,MessageSize-RecvSize1);
jika (RecvSize2+RecvSize1)<>MessageSize lalu
mulai
memo1.Lines.Add('************************SGIP_DELIVER kesalahan penerimaan data*************** *********');
KELUAR;
akhir;
UkuranRecv2:=0;UkuranRecv1:=0;
cHead.CommandId:=htonl(SGIP_DELIVER_RESP);
cHead.Panjang Pesan:=htonl(sizeof(cHead)+sizeof(cDeliver_Resp));
cDeliver_Resp.Hasil:=0;
RecvSize1:=Socket.SendBuf(cHead,SizeOf(cHead));
RecvSize2:=Socket.SendBuf(cDeliver_Resp,SizeOf(cDeliver_Resp));
jika (RecvSize1+RecvSize2)<>ntohl(cHead.MessageLength) maka
mulai
memo1.Lines.Add('************************Respon terhadap kesalahan permintaan SGIP_DELIVER************** ********** ******');
KELUAR;
akhir;
akhir
kalau tidak
jika commandI=SGIP_UNBIND maka
mulai
cHead.CommandId:=htonl(SGIP_UNBIND_RESP);
cHead.Panjang Pesan:=htonl(sizeof(cHead));
memo1.Lines.Add('Respon terhadap SGIP_UNBIND******************************');
RecvSize2:=Socket.SendBuf(cHead,sizeOf(cHead));
jika RecvSize2<>ntohl(cHead.MessageLength) lalu
mulai
memo1.Lines.Add('**********************SGIP_UNBIND kesalahan pengiriman****************** ******' );
KELUAR;
akhir;
akhir
kalau tidak
mulai
akhir;
akhir;
akhir.
//................................................ ................ ............
file://protokol
satuan xy;
antarmuka
kegunaan
SysUtils;
konstanta
SGIP_BIND =$1; file://Verifikasi klien
SGIP_BIND_RESP=$80000001; file://server mengembalikan permintaan verifikasi
SGIP_UNBIND =$2; file://putuskan
SGIP_UNBIND_RESP =$80000002; file://Kembali ke status terputus
SGIP_SUBMIT =$3; file://Kirim pesan singkat MT ke SMG
SGIP_SUBMIT_RESP =$80000003; file://Mengembalikan status pesan singkat MT pengiriman SP
SGIP_DELIVER =$4; file://SMG mengirimkan pesan singkat MO ke SP
SGIP_DELIVER_RESP =$80000004; file://kembali ke status SMG
SGIP_REPORT =$5; file://Mengirimkan status terkini dari perintah kirim sebelumnya ke SP
SGIP_REPORT_RESP=$80000005; file://Respon status SMG
file://Protokol berikut tidak berguna untuk SP
SGIP_ADDSP =$6; //
SGIP_ADDSP_RESP=$80000006; //
SGIP_MODIFYSP =$7; //
SGIP_MODIFYSP_RESP=$80000007; //
SGIP_DELETESP =$8; //
SGIP_DELETESP_RESP=$80000008; //
SGIP_QUERYROUTE=$9; //
SGIP_QUERYROUTE_RESP=$80000009; //
SGIP_ADDTELESEG=$a; //
SGIP_ADDTELESEG_RESP=$8000000a; //
SGIP_MODIFYTELESEG=$b; //
SGIP_MODIFYTELESEG_RESP=$8000000b; //
SGIP_DELETETELESEG=$c; //
SGIP_DELETETELESEG_RESP=$8000000c; //
SGIP_ADDSMG =$d; //
SGIP_ADDSMG_RESP=$8000000d; //
SGIP_MODIFYSMG=$e; //
SGIP_MODIFYSMG_RESP=$0000000e; //
SGIP_DELETESMG=$f; //
SGIP_DELETESMG_RESP=$8000000f; //
SGIP_CHECKUSER=$10; //
SGIP_CHECKUSER_RESP=$80000010;
SGIP_USRRPT =$11; //
SGIP_USRRPT_RESP=$80000011;
SGIP_TRACE =$1000; //
SGIP_TRACE_RESP=$80001000; //
jenis
TEMPTY=File rekaman://catatan kosong
akhir;
file://tajuk pesan
SGIPHead=Rekam
Panjang Pesan: file kata panjang://Total panjang pesan (byte)
CommandId :kata panjang; file://commandID
SNumber1,SNumber2,SNumber3:kata panjang;file://nomor seri
akhir;
file://badan pesan
XBind=Rekam //
Tipe Panjang :byte;
LonginPass :array[0..15] dari char;
LonginName :array[0..15] dari char;
Cadangan :array[0..7] dari char;
akhir;
Bind_Resp=Rekam
Hasil :byte;
Cadangan :array[0..7] dari char;
akhir;
//
Melepaskan=TEMPTY;
Lepas ikatan_Resp=TEMPTY;
//
TelCount=file catatan://nomor ponsel
TelN :array[0..20] dari char;
akhir;
XSkirim=Rekam
SPNumber :array[0..20] dari char;
ChargeNumber :array[0..20] dari char;
Jumlah Pengguna :byte; file://1-100
UserNumber :array[0..20] dari char;//TelCount; file://length adalah UserCount
CorpID :array[0..4] dari char;
ServiceType :array[0..9] dari char;
Jenis Biaya :byte;
FeeValue :array[0..5] dari char;
Nilai yang Diberikan :array[0..5] dari char;
AgenBendera :byte;
LEBIH berhubungan dengan MTFlag :byte;
Prioritas: byte;
ExpireTime :array[0..15] dari char;
ScheduleTime :array[0..15] dari char;
Bendera Laporan :byte;
TP_pid:bita;
TP_udhi:bita;
Pengkodean Pesan:byte;
Tipe Pesan:byte;
Panjang Pesan:kata panjang;
MessageContent :array[0..160] dari char; file://length adalah MessageLength;
Cadangan :array[0..7] dari char;
akhir;
Submit_Resp=Rekam
Hasil :byte;
Cadangan :array[0..7] dari char;
akhir;
//
XDeliver=Rekam
Nomor Pengguna :array[0..20] dari char;
SPNumber :array[0..27] dari char;
{TP_pid :bita;
TP_udhi:bita;
Pengkodean Pesan:byte;
Panjang Pesan :kata panjang;}
MessageContent :array[0..254] dari char; file://length adalah MessageLength;
Cadangan :array[0..7] dari char;
akhir;
Deliver_Resp=Rekam
Hasil :byte;
Cadangan :array[0..7] dari char;
akhir;
//
XReport=Rekam
SubSequNumber1,SubSequNumber2,SubSequNumber3 :kata panjang;
Tipe Laporan :byte;
Nomor Pengguna :array[0..20] dari char;
Negara :byte;
Kode Kesalahan:byte;
Cadangan :array[0..7] dari char;
akhir;
Report_Resp=Rekam
Hasil :byte;
Cadangan :array[0..7] dari char;
akhir;
pelaksanaan
akhir.
mengajukan://,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//
pelayan
satuan utama;
antarmuka
kegunaan
Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir,
Dialog, xy, ScktComp, StdCtrls, winock;
jenis
TForm1 = kelas(TForm)
Memo1: TMemo;
ServerSocket1: TServerSocket;
prosedur ServerSocket1ClientRead(Pengirim: TObject;
Soket: TCustomWinSocket);
prosedur ServerSocket1ClientError(Pengirim: TObject;
Soket: TCustomWinSocket; ErrorEvent: TErrorEvent;
varErrorCode: Bilangan Bulat);
pribadi
{Deklarasi pribadi}
publik
{Pernyataan publik}
akhir;
var
Formulir1: TForm1;
pelaksanaan
{$R *.dfm}
prosedur TForm1.ServerSocket1ClientRead(Pengirim: TObject;
Soket: TCustomWinSocket);
jenis
SendPack = catatan yang dikemas
kepala: SGIHead;
resp: Bind_Resp;
akhir;
var
Kepala Ulang: Kepala SGIIP;
sresp:Bind_Resp;
Mengikat Ulang:xMengikat;
Pengiriman Ulang: XDeliver;
LaporanLaporan:XLaporan;
i1,i2: bilangan bulat;
str:tali;
S_Nomor1,S_Nomor2,S_Nomor3,panjangI1:kata panjang;
s_Pack:KirimPaket;
mulai
fillchar(sresp,ukuran(sresp),0);
fillchar(Kepala Ulang,ukuran(Kepala Ulang),0);
i1:=Socket.ReceiveBuf(ReHead,sizeof(ReHead));
jika i1<>sizeof(ReHead) lalu
mulai
memo1.Lines.Add('Pesan yang diterima Error exit');
KELUAR;
akhir;
S_Number1:=Kepala Ulang.SNumber1;
S_Number2:=Kepala Ulang.SNumber2;
S_Number3:=Kepala Ulang.SNumber3;
ReHead.MessageLength:=ntohl(ReHead.MessageLength);
ReHead.CommandId:=ntohl(ReHead.CommandId);
ReHead.SNumber1:=ntohl(ReHead.SNumber1);
ReHead.SNumber2:=ntohl(ReHead.SNumber2);
ReHead.SNumber3:=ntohl(ReHead.SNumber3);
memo1.Lines.Add('baca pesan SMG');
memo1.Lines.Add(inttostr(ReHead.MessageLength));
memo1.Lines.Add(inttostr(ReHead.CommandId));
memo1.Lines.Add(inttostr(ReHead.SNumber1));
memo1.Lines.Add(inttostr(ReHead.SNumber2));
memo1.Lines.Add(inttostr(ReHead.SNumber3));
jika ReHead.CommandId=SGIP_UNBIND maka
mulai file://putuskan
FillChar(Kepala Ulang,Ukuran(Kepala Ulang),0);
ReHead.MessageLength:=htonl(SizeOf(ReHead));
ReHead.CommandId:=htonl(SGIP_UNBIND_RESP);
Kepala Ulang.SNumber1:=S_Nomor1;
Kepala Ulang.SNumber2:=S_Nomor2;
Kepala Ulang.SNumber3:=S_Nomor3;
i1:=socket.SendBuf(ReHead,sizeof(ReHead));
jika i1<>sizeof(ReHead) lalu
memo1.Lines.Add('Kirim SGIP_UNBIND_Resp Kesalahan')
kalau tidak
memo1.Lines.Add('Kirim SGIP_UNBIND_Resp OK');
akhir
lain jika ReHead.CommandId=SGIP_BIND lalu
mulai file://SMG mengirimkan pesan singkat MO ke SP
FillChar(s_Pack,SizeOf(s_Pack),0);
FillChar(Bind Ulang,SizeOf(Bind Ulang),0);
soket.ReceiveBuf(ReBind,SizeOf(ReBind));
s_Pack.head.MessageLength:=htonl(SizeOf(s_Pack));
s_Pack.head.CommandId:=htonl(SGIP_BIND_RESP);
s_Pack.head.SNumber1:=S_Number1;
s_Pack.head.SNumber2:=S_Nomor2;
s_Pack.head.SNumber3:=S_Number3;
s_Pack.resp.Hasil:=0;
i1:=socket.SendBuf(s_Pack,SizeOf(s_Pack));
jika i1<>SizeOf(s_Pack) lalu
memo1.Lines.Add('kirim SGIP_Bind_Resp Error')
kalau tidak
memo1.Lines.Add('Kirim SGIP_bind_Resp');
akhir
lain jika ReHead.CommandId=SGIP_DELIVER lalu
mulai
FillChar(s_Pack,SizeOf(s_Pack),0);
FillChar(Pengiriman Ulang,Ukuran(Pengiriman Ulang),0);
Socket.ReceiveBuf(Pengiriman Ulang,SizeOf(Pengiriman Ulang));
s_Pack.head.MessageLength:=htonl(SizeOf(s_Pack));
s_Pack.head.CommandId:=htonl(SGIP_DELIVER_RESP);
s_Pack.head.SNumber1:=S_Number1;
s_Pack.head.SNumber2:=S_Nomor2;
s_Pack.head.SNumber3:=S_Number3;
s_Pack.resp.Hasil:=0;
jika socket.SendBuf(s_Pack,SizeOf(s_Pack)) <>SizeOf(s_Pack) maka
memo1.Lines.Add('kirim SGIP_DELIVER_RESP Error')
kalau tidak
memo1.Lines.Add('Kirim SGIP_DELIVER_RESP OK');
memo1.Lines.Add(ReDeliver.UserNumber);
memo1.Lines.Add(ReDeliver.SPNumber);
file://longI1:=ntohl(ReDeliver.MessageLength);
file://memo1.Lines.Add(inttostr(longI1)+' '+inttostr(ReDeliver.MessageLength));
memo1.Lines.Add(ReDeliver.MessageContent);
akhir
lain jika ReHead.CommandId=SGIP_REPORT lalu
mulai
FillChar(s_Pack,SizeOf(s_Pack),0);
FillChar(Laporan,Ukuran(Laporan),0);
Socket.ReceiveBuf(Laporan,Ukuran(Laporan));
s_Pack.head.MessageLength:=htonl(SizeOf(s_Pack));
s_Pack.head.CommandId:=htonl(SGIP_REPORT_RESP);
s_Pack.head.SNumber1:=S_Number1;
s_Pack.head.SNumber2:=S_Nomor2;
s_Pack.head.SNumber3:=S_Number3;
s_Pack.resp.Hasil:=0;
jika socket.SendBuf(s_Pack,SizeOf(s_Pack)) <>SizeOf(s_Pack) maka
memo1.Lines.Add('kirim SGIP_Bind_Resp Error')
kalau tidak
memo1.Lines.Add('Kirim SGIP_bind_Resp');
memo1.Lines.Add(Report.UserNumber);
memo1.Lines.Add(inttostr(Report.State));
akhir;
akhir;
prosedur TForm1.ServerSocket1ClientError(Pengirim: TObject;
Soket: TCustomWinSocket; ErrorEvent: TErrorEvent;
varErrorCode: Bilangan Bulat);
var
pesan kesalahan:string;
mulai
kasus ErrorEvent dari
eeUmum: errorMsg:='eeUmum';
eeSend: errorMsg:='eeSend';
eeReceive: errorMsg:='eeReceive';
eeConnect: errorMsg:='eeConnect';
eeDisconnect: errorMsg:='eeDisconnect';
eeTerima: errorMsg:='eeTerima';
akhir;
Kode Kesalahan:=0;
Memo1.Lines.Add('Kesalahan Soket:'+errorMsg);
akhir;
akhir.