Unit1.~pas
上传用户:anlu_slm
上传日期:2022-07-30
资源大小:283k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit Unit1;
  2. //**********************************************************
  3. //深圳市东方数码技术有限公司
  4. //曾伟才
  5. //2004年11月9日
  6. //**********************************************************
  7. interface
  8. uses
  9.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  10.   Dialogs, OleCtrls, EdSockServerApi, StdCtrls, Types, SysConst, VarUtils,
  11.   ExtCtrls;
  12. type
  13.     TForm1 = class(TForm)
  14.     edtPeerIP: TEdit;
  15.     edtPeerPort: TEdit;
  16.     btnConnect: TButton;
  17.     lblStatus: TLabel;
  18.     btnCloseConnect: TButton;
  19.     Lable3: TLabel;
  20.     lblMAC: TLabel;
  21.     GroupBox1: TGroupBox;
  22.     Label1: TLabel;
  23.     Label2: TLabel;
  24.     GroupBox2: TGroupBox;
  25.     Label3: TLabel;
  26.     edtLocalPort: TEdit;
  27.     btnListen: TButton;
  28.     Label4: TLabel;
  29.     memSend: TMemo;
  30.     Label5: TLabel;
  31.     memRecv: TMemo;
  32.     btnSend: TButton;
  33.     btnClear: TButton;
  34.     Label6: TLabel;
  35.     lblConnectID: TLabel;
  36.     btnTest: TButton;
  37.     Timer1: TTimer;
  38.     procedure btnConnectClick(Sender: TObject);
  39.     procedure btnCloseConnectClick(Sender: TObject);
  40.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  41.     procedure btnListenClick(Sender: TObject);
  42.     procedure FormCreate(Sender: TObject);
  43.     procedure btnSendClick(Sender: TObject);
  44.     procedure btnClearClick(Sender: TObject);
  45.     procedure btnTestClick(Sender: TObject);
  46.     procedure Timer1Timer(Sender: TObject);
  47.   private
  48.     { Private declarations }
  49.   public
  50.     { Public declarations }
  51.   end;
  52. var
  53.   Form1: TForm1;
  54. implementation
  55. {$R *.dfm}
  56. var g_ConnectID : Integer =0;
  57. var times :Integer =0;
  58. procedure TForm1.btnConnectClick(Sender: TObject);
  59. var
  60.   len : Integer;
  61.   var ip: string;
  62.   port: Integer;
  63. begin
  64.     StopListen();
  65.     len := edtPeerIP.GetTextLen();
  66.     if len=0 then Exit;
  67.     if edtPeerPort.GetTextLen()=0 then Exit;
  68.     ip := edtPeerIP.Text;
  69.     if not TryStrToInt(edtPeerPort.Text ,port) then Exit;
  70.     OpenConnect(PAnsiChar(ip), port, nil , 0);
  71. end;
  72. procedure EdSockAccept(ConnectID: Longint); stdcall
  73. var
  74.   mac: array[0..6] of Byte;
  75.   strmac: array[0..30] of Byte;
  76.   len : Integer;
  77. begin
  78.     if (g_ConnectID<>0) then CloseConnect(g_ConnectID);
  79.     g_ConnectID :=ConnectID;
  80.     Form1.lblStatus.Caption :='已连接';
  81.     GetMAC(g_ConnectID, PByte(@mac[0]), 6);
  82.     len := mac_ntoa(PByte(@mac[0]),6,PByte(@strmac[0]),30);
  83.     strmac[len] := 0;
  84.     Form1.lblMAC.Caption := PChar(PByte(@strmac[0]));
  85.     Form1.lblConnectID.Caption := IntToStr(g_ConnectID);
  86. end;
  87. procedure EdSockConnectClose(ConnectID: Longint); stdcall;
  88. begin
  89.     try
  90.     g_ConnectID := 0 ;
  91.     Form1.lblStatus.Caption :='未连接';
  92.     Form1.lblMAC.Caption :='';
  93.     Form1.lblConnectID.Caption := '';
  94.     finally
  95.     end;
  96. end;
  97. procedure EdSockReceFromCOM(ConnectID: Longint;
  98.   COMNum: Longint; pDataBuf: PByte; DataLength: Longint); stdcall
  99. var
  100.     recvdata :array of byte ;
  101.     str : String;
  102.     i : Integer;
  103. begin
  104.     if (ConnectID<>g_ConnectID) then Exit;
  105.     setlength(recvdata,DataLength+1);
  106.     for i := 0 to DataLength-1 do
  107.     begin
  108.       recvdata[i] := pDataBuf^;
  109.       pDataBuf := PByte(PChar(pDataBuf) + 1);
  110.     end;
  111. //    move(pDataBuf,recvdata,DataLength);
  112.     str := String(recvdata);
  113.     if length(Form1.memRecv.Lines.Text)>1000 then
  114.         Form1.memRecv.Lines.Text :=''
  115.     else
  116.         Form1.memRecv.Lines.Text := Form1.memRecv.Lines.Text+str;
  117. end;
  118. //procedure OnError(SocketID: Longint; ErrorCode: Longint); stdcall;
  119. //procedure OnReceConfigData(ConnectID: Longint; pDataBuf: PByte; DataLength: Longint); stdcall;
  120. //procedure OnSwitchChange(ConnectID: Longint; PortNum: Longint; Value: Longint); stdcall;
  121. procedure TForm1.btnCloseConnectClick(Sender: TObject);
  122. begin
  123.     if (g_ConnectID <> 0) then
  124.     begin
  125.         CloseConnect(g_ConnectID);
  126.         g_ConnectID :=0;
  127.         lblStatus.Caption :='未连接';
  128.         lblMAC.Caption :='';
  129.         lblConnectID.Caption := '';
  130.     end;
  131. end;
  132. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  133. begin
  134.     if (g_ConnectID<>0) then CloseConnect(g_ConnectID);
  135. end;
  136. procedure TForm1.btnListenClick(Sender: TObject);
  137. var
  138.   LocalPort: Integer;
  139.   LocalIP: PAnsiChar;
  140. begin
  141.     if (g_ConnectID<>0) then CloseConnect(g_ConnectID);
  142.     LocalIP := '0.0.0.0';
  143.     LocalPort := StrToInt(edtLocalPort.Text);
  144.     StartListen(LocalIP, LocalPort);
  145. end;
  146. procedure TForm1.FormCreate(Sender: TObject);
  147. var
  148.   OnAccept : TOnAccept;
  149.   OnConnectClose : TOnConnectClose;
  150.   OnReceFromCOM : TOnReceFromCOM;
  151. begin
  152.     memSend.Text := '';
  153.     memRecv.Text := '';
  154.     OnAccept := TOnAccept(@EdSockAccept);
  155.     OnConnectClose := TOnConnectClose(@EdSockConnectClose);
  156.     OnReceFromCOM := TOnReceFromCOM(@EdSockReceFromCOM);
  157.     SetCallback(OnAccept,OnConnectClose,nil,nil,OnReceFromCOM,nil);
  158. end;
  159. procedure TForm1.btnSendClick(Sender: TObject);
  160. var
  161.     DataSend : array of byte ;
  162.     len : Longint;
  163.     com : Integer;
  164.     p : PChar;
  165. begin
  166.     if g_ConnectID = 0 then Exit;
  167.     len := StrLen(memSend.Lines.GetText());
  168.     setlength(DataSend,len);
  169.     p := memSend.Lines.GetText();
  170.     move(p[0],DataSend[0],len);
  171.     com := GetCOM(g_ConnectID);
  172.     SendToCOM(g_ConnectID,com,@DataSend[0],len);
  173. end;
  174. procedure TForm1.btnClearClick(Sender: TObject);
  175. begin
  176.     memRecv.Text := '';
  177. end;
  178. procedure TForm1.btnTestClick(Sender: TObject);
  179. begin
  180.   timer1.Enabled :=true;
  181. end;
  182. procedure TForm1.Timer1Timer(Sender: TObject);
  183. var
  184.     strmsg :string;
  185. begin
  186.     times := times+1;
  187.     if (times > 5000) then
  188.     begin
  189.         timer1.Enabled :=false;
  190.         times :=0;
  191.         strmsg := '完成';
  192.         MessageDlg(strmsg,mtInformation,[mbOK],0);
  193.         EXIT;
  194.     end;
  195.     if (g_ConnectID = 0) then
  196.     begin
  197.         timer1.Enabled :=false;
  198.         strmsg :=IntToStr(times);
  199.         MessageDlg(strmsg,mtInformation,[mbOK],0);
  200.         times :=0;
  201.         exit;
  202.     end;
  203.     btnSendClick(btnTest);
  204. end;
  205. end.