ServerMain.pas
上传用户:psxgmh
上传日期:2013-04-08
资源大小:15112k
文件大小:3k
源码类别:

Delphi/CppBuilder

开发平台:

Delphi

  1. unit ServerMain;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   StdCtrls, IPC, ComCtrls, Spin;
  6. type
  7.   TfrmServer = class(TForm)
  8.     Label6: TLabel;
  9.     edtSessionName: TEdit;
  10.     btnListen: TButton;
  11.     GroupBox1: TGroupBox;
  12.     Label3: TLabel;
  13.     Label4: TLabel;
  14.     edtReceiveString: TEdit;
  15.     sedtReceiveInteger: TSpinEdit;
  16.     StatusBar: TStatusBar;
  17.     Label5: TLabel;
  18.     GroupBox2: TGroupBox;
  19.     Label1: TLabel;
  20.     Label2: TLabel;
  21.     edtSendString: TEdit;
  22.     sedtSendInteger: TSpinEdit;
  23.     btnSend: TButton;
  24.     procedure btnSendClick(Sender: TObject);
  25.     procedure FormCreate(Sender: TObject);
  26.     procedure btnListenClick(Sender: TObject);
  27.   private
  28.     FClientHwnd: HWND;
  29.     IPCServer: TIPCServer; //定义IPCServer
  30.     Procedure IPCServerAfterOpen(Sender : Tobject);
  31.     procedure IPCServerConnect(AHwnd: HWND);
  32.     procedure IPCServerDisconnect(AHwnd: HWND);
  33.     procedure IPCServerClientData(MsgPointer: Pointer; AHwnd: HWND);
  34.     procedure IPCServerAfterClose(Sender: TObject);
  35.   public
  36.     { Public declarations }
  37.   end;
  38. type
  39.   {定义一个发送和接收数据记录类型}
  40.   PIPCData = ^TIPCData;
  41.   TIPCData = record
  42.     SendString: string[30];
  43.     SendInteger: integer;
  44.   end;
  45. var
  46.   frmServer: TfrmServer;
  47. implementation
  48. {$R *.DFM}
  49. //当窗体被创建时
  50. procedure TfrmServer.FormCreate(Sender: TObject);
  51. begin
  52. //创建IPCServer
  53.   IPCServer := TIPCServer.Create(self);
  54.   IPCServer.OnAfterOpen := IPCServerAfterOpen;
  55.   IPCServer.OnConnect := IPCServerConnect;
  56.   IPCServer.OnDisconnect := IPCServerDisConnect;
  57.   IPCServer.OnAfterClose := IPCServerAfterClose;
  58.   IPCServer.OnClientData := IPCServerClientData;
  59. end;
  60. //监听连接
  61. procedure TfrmServer.btnListenClick(Sender: TObject);
  62. begin
  63.   if not IPCServer.Active then
  64.     IPCServer.SessionName := edtSessionName.Text;
  65.   IPCServer.Open;
  66. end;
  67. //发送数据
  68. procedure TfrmServer.btnSendClick(Sender: TObject);
  69. var
  70.   MsgData: TIPCData;
  71. begin
  72.   if IPCServer.Active then
  73.   begin
  74.     MsgData.SendString := edtSendString.Text;
  75.     MsgData.SendInteger := SedtSendInteger.Value;
  76.     IPCServer.SendMsg(@MsgData, FClientHwnd, Sizeof(MsgData));
  77.   end;
  78. end;
  79. //服务器连接事件
  80. procedure TfrmServer.IPCServerConnect(AHwnd: HWND);
  81. begin
  82.   FClientHwnd := AHwnd;
  83.   statusbar.Panels[0].Text := '连接状态:已连接';
  84.   statusbar.Refresh;
  85. end;
  86. //服务器断开事件
  87. procedure TfrmServer.IPCServerDisconnect(AHwnd: HWND);
  88. begin
  89.   statusbar.Panels[0].Text := '连接状态:未连接';
  90.   statusbar.Refresh;
  91. end;
  92. //接收客户端数据
  93. procedure TfrmServer.IPCServerClientData(MsgPointer: Pointer; AHwnd: HWND);
  94. var
  95.   AMsg: TIPCData;
  96. begin
  97.   FClientHwnd := AHwnd;
  98.   AMsg := TIPCData(MsgPointer^);
  99.   edtReceiveString.Text := AMsg.SendString;
  100.   sedtReceiveInteger.Value := AMsg.SendInteger;
  101. end;
  102. //服务器端被打开事件
  103. procedure TfrmServer.IPCServerAfterOpen(sender : TObject);
  104. begin
  105.   statusbar.Panels[0].Text := '连接状态:处于监听状态....';
  106.   statusbar.Refresh;
  107.   FClientHwnd := 0;
  108. end;
  109. //服务器端被断开事件
  110. procedure TfrmServer.IPCServerAfterClose(Sender: TObject);
  111. begin
  112.   statusbar.Panels[0].Text := '连接状态:未连接';
  113.   statusbar.Refresh;
  114.   FClientHwnd := 0;
  115. end;
  116. end.