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

📄 servermain.pas

📁 《Delphi 7经典问题解析》源代码 第一到七章 基础篇源程序 应用篇源程序
💻 PAS
字号:
unit ServerMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, IPC, ComCtrls, Spin;

type
  TfrmServer = class(TForm)
    Label6: TLabel;
    edtSessionName: TEdit;
    btnListen: TButton;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    edtReceiveString: TEdit;
    sedtReceiveInteger: TSpinEdit;
    StatusBar: TStatusBar;
    Label5: TLabel;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    edtSendString: TEdit;
    sedtSendInteger: TSpinEdit;
    btnSend: TButton;
    procedure btnSendClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnListenClick(Sender: TObject);
  private
    FClientHwnd: HWND;
    IPCServer: TIPCServer; //定义IPCServer
    Procedure IPCServerAfterOpen(Sender : Tobject);
    procedure IPCServerConnect(AHwnd: HWND);
    procedure IPCServerDisconnect(AHwnd: HWND);
    procedure IPCServerClientData(MsgPointer: Pointer; AHwnd: HWND);
    procedure IPCServerAfterClose(Sender: TObject);

  public
    { Public declarations }
  end;

type
  {定义一个发送和接收数据记录类型}
  PIPCData = ^TIPCData;
  TIPCData = record
    SendString: string[30];
    SendInteger: integer;
  end;
var
  frmServer: TfrmServer;

implementation

{$R *.DFM}

//当窗体被创建时
procedure TfrmServer.FormCreate(Sender: TObject);
begin
//创建IPCServer
  IPCServer := TIPCServer.Create(self);
  IPCServer.OnAfterOpen := IPCServerAfterOpen;
  IPCServer.OnConnect := IPCServerConnect;
  IPCServer.OnDisconnect := IPCServerDisConnect;
  IPCServer.OnAfterClose := IPCServerAfterClose;
  IPCServer.OnClientData := IPCServerClientData;
end;

//监听连接
procedure TfrmServer.btnListenClick(Sender: TObject);
begin
  if not IPCServer.Active then
    IPCServer.SessionName := edtSessionName.Text;
  IPCServer.Open;
end;


//发送数据
procedure TfrmServer.btnSendClick(Sender: TObject);
var
  MsgData: TIPCData;
begin
  if IPCServer.Active then
  begin
    MsgData.SendString := edtSendString.Text;
    MsgData.SendInteger := SedtSendInteger.Value;
    IPCServer.SendMsg(@MsgData, FClientHwnd, Sizeof(MsgData));
  end;
end;

//服务器连接事件
procedure TfrmServer.IPCServerConnect(AHwnd: HWND);
begin
  FClientHwnd := AHwnd;
  statusbar.Panels[0].Text := '连接状态:已连接';
  statusbar.Refresh;
end;

//服务器断开事件
procedure TfrmServer.IPCServerDisconnect(AHwnd: HWND);
begin
  statusbar.Panels[0].Text := '连接状态:未连接';
  statusbar.Refresh;

end;

//接收客户端数据
procedure TfrmServer.IPCServerClientData(MsgPointer: Pointer; AHwnd: HWND);
var
  AMsg: TIPCData;
begin
  FClientHwnd := AHwnd;
  AMsg := TIPCData(MsgPointer^);
  edtReceiveString.Text := AMsg.SendString;
  sedtReceiveInteger.Value := AMsg.SendInteger;
end;

//服务器端被打开事件
procedure TfrmServer.IPCServerAfterOpen(sender : TObject);
begin
  statusbar.Panels[0].Text := '连接状态:处于监听状态....';
  statusbar.Refresh;
  FClientHwnd := 0;
end;

//服务器端被断开事件
procedure TfrmServer.IPCServerAfterClose(Sender: TObject);
begin
  statusbar.Panels[0].Text := '连接状态:未连接';
  statusbar.Refresh;
  FClientHwnd := 0;
end;



end.

⌨️ 快捷键说明

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