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

📄 unit1.pas

📁 通讯过程中需要某些重要的命令不丢失
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, UntUdpCtl,
  IdSocketHandle, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    btn1: TButton;
    Edit6: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure OnCaseClentData(ISender: TudpCtl; IData: Pointer; ISize: Cardinal; IFromIP: string; IPort: integer);
  public
    ClientUdpCtl: TudpCtl;
    Lmem: TMemoryStream;
    procedure OnError(Sender: TObject; IData: PSafeUdpData; IErrorKind: SHeadLv);
  end;

var
  Form1: TForm1;

implementation

uses UntProctol, pmybasedebug;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientUdpCtl := TudpCtl.Create(Self);
  ClientUdpCtl.OnDataCase := OnCaseClentData;
  ClientUdpCtl.RemoteHost := '127.0.0.1';
  ClientUdpCtl.RemotePort := 1001;
  ClientUdpCtl.ServerPort := 1002;
  ClientUdpCtl.OnDataError := OnError;
  Lmem := TMemoryStream.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Lhead: Rhead;
  LP: PChar;
begin
  Lhead.Id := 1;
  Lmem.Position := 0;
  Lmem.WriteBuffer(lHead, Sizeof(Lhead));
  LP := GetMemory(Memo1.GetTextLen + 1);
  Lmem.SetSize(Memo1.GetTextLen + 1);
  Memo1.GetTextBuf(LP, Memo1.GetTextLen + 1);
  Lmem.WriteBuffer(lp^, Memo1.GetTextLen + 1);
  FreeMemory(LP);
  ClientUdpCtl.RemoteHost := Edit2.Text;
  ClientUdpCtl.PeerSize := StrToInt(Edit5.Text);
  ClientUdpCtl.ReSendTime := StrToInt(Edit3.Text);
  ClientUdpCtl.FreeWindowsCount := StrToInt(Edit4.Text);
  ClientUdpCtl.SleepTime := StrToInt(Edit6.Text);
  ClientUdpCtl.SafeSendBuff(Lmem.Memory^, Lmem.Size);
  Edit1.Text := IntToStr(Lmem.Size);
end;

procedure TForm1.OnCaseClentData(ISender: TudpCtl; IData: Pointer; ISize:
  Cardinal; IFromIP: string; IPort: integer);
begin
  with ISender do begin
    case PInteger(IData)^ of //
      1: begin
          ShowMessage('Svr Resp Hello');
        end;
    end; // case
  end;
end;

procedure TForm1.OnError(Sender: TObject; IData: PSafeUdpData;
  IErrorKind: SHeadLv);
begin
  Gob_Debug.AddLogShower('第%d-%d个包异常了 类型%d',
    [Idata^.Head.PackedId, Idata^.Head.Part, ord(IErrorKind)]);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  Gob_Debug.ShowDebugform;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Lmem.Free;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -