📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSWinsockLib_TLB, NMUDP, Menus, ComCtrls,
ExtCtrls, Mask, Grids, ToolWin, MSCommLib_TLB, DBGrids, Buttons;
const
SEND_BUF_LEN=50; //发送数据缓冲区长度
RECEIV_BUF_LEN=255; //接收数据缓冲区长度
RECORD_LEN=10; //一条刷卡记录长度
RECORD_NUM_ONE=5; //一次传过来的记录数
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N4: TMenuItem;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
GroupBox3: TGroupBox;
Memo1: TMemo;
ToolBar1: TToolBar;
Winsock: TWinsock;
GroupBox1: TGroupBox;
SENDTEXT: TEdit;
Send_gprsclick: TButton;
Label4: TLabel;
clearclick: TButton;
GroupBox2: TGroupBox;
portn: TEdit;
Button3: TButton;
GroupBox4: TGroupBox;
tcp_Button: TButton;
udp_Button: TButton;
procedure DataReci(Sender: TObject; bytesTotal: Integer);
procedure Send_gprsclickClick(Sender: TObject);
procedure Form1Close(Sender: TObject; var Action: TCloseAction);
procedure N4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure clearclickClick(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure tcp_ButtonClick(Sender: TObject);
procedure udp_ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
RemotHost:string;
RemotPort:integer;
Record_Num:word;
Frame_Num:word;
strMachine_Num:string;
SeqNr:byte; //序列号
implementation
uses Unit2, Unit3, Unit4, Unit5, Unit6,database,myFunction;
{$R *.dfm}
//监控中心接受到数据
procedure TForm1.DataReci(Sender: TObject; bytesTotal: Integer);
var
data:OleVariant;
Receive_buf:array[0..RECEIV_BUF_LEN] of byte;
Recive_Buf_Str:string;
j,i:word;
begin
Frame_Num:=Frame_Num+1;
if Frame_Num>=65530 then
Frame_Num:=0;
Winsock.GetData(data);
RemotHost:=Winsock.RemoteHostIP;
RemotPort:=Winsock.RemotePort;
Winsock.RemoteHost:=RemotHost;
Winsock.RemotePort:=RemotPort;
for i:=0 to bytesTotal-1 do
begin
Receive_buf[i]:=data[i];
Recive_Buf_Str:=Recive_Buf_Str+char(Receive_buf[i]);
end;
memo1.Lines.Add(' ');
memo1.Lines.Add('帧号'+IntToStr(Frame_Num)+':');
memo1.Lines.Add('发送IP:'+RemotHost);
memo1.Lines.Add('发送PORT:'+IntToStr(RemotPort));
memo1.Lines.Add('接收到(HEX):'+Recive_Buf_Str);
Send_gprsclick.Enabled:= True;
sleep(1200);
Winsock.SendData('12');//收到后立即发送应答,测试用
end;
procedure TForm1.Send_gprsclickClick(Sender: TObject);
var
// Send_Buf:array[0..SEND_BUF_LEN] of byte;
Send_Buf_Var:OleVariant;
Send_Buf_Str:string;
i,len:word;
buffer:pchar;
Send_len:byte;
begin
Send_len := 0;
len := strlen(pchar(SENDTEXT.Text));
if len<1 then
exit;
Send_Buf_Var:=VarArrayCreate([0,len-1],varByte);
try
GetMem(Buffer,255);
strcopy(buffer,pchar(SENDTEXT.Text));
for i:=0 to len-1 do
begin
Send_Buf_Var[Send_len]:=byte((Buffer+i)^);
Send_len := Send_len+1;
end;
FreeMem(Buffer);
for i:=0 to len-1 do
begin
Send_Buf_Str:=Send_Buf_Str+' '+IntToHex(Send_Buf_Var[i],2);
end;
Winsock.SendData(Send_Buf_Var);//发送二进制数据
memo1.Lines.Add('发送数据:'+Send_Buf_Str);
except
ShowMessage('发送错误,找不到远程设备');
end;
end;
procedure TForm1.Form1Close(Sender: TObject; var Action: TCloseAction);
begin
WinSock.Close;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
init_machine.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// WinSock.RemoteHost;
// Winsock.Bind;
memo1.Visible:=false;
Send_gprsclick.Enabled:= false;
end;
procedure TForm1.clearclickClick(Sender: TObject);
begin
memo1.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Winsock.LocalPort:=strtoint(portn.text);
WinSock.RemoteHost;
Winsock.Bind;
memo1.Visible :=true;
Button3.Enabled:=false;
end;
procedure TForm1.tcp_ButtonClick(Sender: TObject);
begin
Winsock.Protocol:=0;
udp_button.Enabled:=false;
end;
procedure TForm1.udp_ButtonClick(Sender: TObject);
begin
Winsock.Protocol:=1;
tcp_button.Enabled:=false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -