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

📄 udpclientmain.pas

📁 一个使用UDP开发的消息广播服务与客户端程序
💻 PAS
字号:
{***************************************************************
 *
 * Project  : UDPClient
 * Unit Name: UDPClientMain
 * Purpose  : UDP demo - client project
 * Version  : 1.0
 * Date  : Wed 25 Apr 2001  -  01:44:24
 * Author  : <unknown>
 * History  :
 * Tested  : Wed 25 Apr 2001  // Allen O'Neill <allen_oneill@hotmail.com> 
 *
 ****************************************************************}

unit UDPClientMain;

interface

uses

  windows, messages, graphics, controls, forms, dialogs, stdctrls,
  SysUtils, Classes, ExtCtrls, ScktComp,typeinc, Buttons;

type
  TUDPMainForm = class(TForm)
  UDPMemo: TMemo;
  SendButton: TButton;
    Edit1: TEdit;
    GroupBox1: TGroupBox;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit9: TLabeledEdit;
    LabeledEdit10: TLabeledEdit;
    GroupBox2: TGroupBox;
    LabeledEdit6: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit7: TLabeledEdit;
    LabeledEdit8: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    CClient: TClientSocket;
    SpeedButton1: TSpeedButton;
    CServer: TServerSocket;
  procedure FormCreate(Sender: TObject);
    procedure CClientError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure CClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure SendButtonClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  UDPMainForm: TUDPMainForm;

implementation

const
  HOSTNAMELENGTH = 80;
  RECIEVETIMEOUT = 5000; // milliseconds

{$IFDEF MSWINDOWS}{$R *.dfm}{$ELSE}{$R *.xfm}{$ENDIF}

procedure TUDPMainForm.FormCreate(Sender: TObject);
begin

    self.Top:=(screen.Height-self.Height) div 2;
    self.Left:=(screen.Width-self.Width) div 2;
    try
         //初始化连接
        UDPMemo.Lines.Add('测试服务器已经启动');
        LabeledEdit9.Text := CClient.Host;
        LabeledEdit1.Text:= CClient.Address;
        LabeledEdit2.Text := IntToStr(CClient.Port);
        CClient.Active:=True;
    except
        UDPMemo.Lines.Add('无法连接服务器');
    end;
end;

procedure TUDPMainForm.CClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
    UDPMemo.Lines.Add('无法连接服务器');
end;

procedure TUDPMainForm.CClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  re:pchar;
  sbuf:string;
  relong:integer;
begin
    re:=nil;
    while socket.ReceiveLength>0 do
      begin
        //申请内存
        re:=AllocMem(socket.receivelength);
      TRY
        relong:=socket.ReceiveLength;
        Socket.ReceiveBuf(re^,Socket.receivelength);
        sBuf:=strpas(re);
        Setlength(sbuf,relong);
      FINALLY
        freemem(re);
      END;
      UDPMemo.Lines.Add(sbuf);
    end;
end;

procedure TUDPMainForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if CClient.Active then
    CClient.Close;
end;

procedure TUDPMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
  begin
    CClient.Socket.SendText(Edit1.Text);
    edit1.SelectAll;
    key:=#0;
  end;
end;

procedure TUDPMainForm.SendButtonClick(Sender: TObject);
var
    Bufmsg:TM_ServLogin;
    relong:integer;
begin
     Bufmsg.Msg:=GetSrvList;
     Bufmsg.SendID:='00000001';
     Bufmsg.ServID:='00000001';
     Bufmsg.ServPass:='12345678';

     //得到结构的大小
     relong:=Sizeof(Bufmsg)+1;
     CClient.Socket.SendBuf(Bufmsg,relong);

end;

procedure TUDPMainForm.SpeedButton1Click(Sender: TObject);
begin
    try

         //初始化连接

        UDPMemo.Lines.Add('测试服务器已经启动');
        LabeledEdit9.Text := LabeledEdit1.Text;
        //LabeledEdit1.Text:= LabeledEdit2.Text;
        LabeledEdit2.Text := IntToStr(CClient.Port);
        CClient.Active:=True;
    except
        UDPMemo.Lines.Add('无法连接服务器');
    end;
end;

end.

⌨️ 快捷键说明

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