ICS组件中WSocketServer与WSocketClient收到数据示例

原创 2013年12月05日 16:00:02

     偶然一次得知了ICS组件在DELPHI7的应用较为稳定,于是找到了ICS组件,安装完成后,试验了一下,还是不错的。源码贴于下:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket,
  OverbyteIcsWSocketS;

type
  TForm1 = class(TForm)
    WSocketServer1: TWSocketServer;
    WSocket1: TWSocket;
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure WSocketServer1ClientConnect(Sender: TObject;
      Client: TWSocketClient; Error: Word);
    procedure WSocketServer1ClientDisconnect(Sender: TObject;
      Client: TWSocketClient; Error: Word);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure WSocketServer1DataAvailable(Sender: TObject; ErrCode: Word);
    procedure WSocketServer1ChangeState(Sender: TObject; OldState,
      NewState: TSocketState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//start listen...
 try
   WSocketServer1.Close;
   WSocketServer1.Addr :='127.0.0.1';
   WSocketServer1.Port :='6000';
   //WSocketServer1.Banner:='';
   //WSocketServer1.BannerTooBusy:='';
   //WSocketServer1.ClientClass := TWSocketClient;
   WSocketServer1.Listen;
 except

 end;
end;

procedure TForm1.WSocketServer1ClientConnect(Sender: TObject;
  Client: TWSocketClient; Error: Word);
begin

//注意:ICS TCP SERVER收到客户端连接进,必须要将数据处理事件方法入口委托到给客户端Client的处理方法入口,否则无法响应收数据的事件。
 Client.OnDataAvailable :=  WSocketServer1DataAvailable;

 Memo1.Lines.Add( Format('Client [%s:%s] Connected..',[ Client.GetPeerAddr,client.GetPeerPort]));
end;

procedure TForm1.WSocketServer1ClientDisconnect(Sender: TObject;
  Client: TWSocketClient; Error: Word);
begin
  Memo1.Lines.Add( Format('Client [%s:%s] disConnected..',[ Client.GetPeerAddr,client.GetPeerPort]));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  try
    WSocket1.Addr :='127.0.0.1';
    WSocket1.Port :='6000';
    WSocket1.Connect;
  except

  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  WSocket1.Close;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  WSocketServer1.Close;
end;

procedure TForm1.Button5Click(Sender: TObject);
var i,sendlen:Integer; sendbuff:array[0..32] of byte;  data:Pointer; str:string;
begin
  if WSocket1.State = wsConnected then
  begin
    FillChar(sendbuff,33,0);
    str:='';
    for i:=0 to 31 do
    begin
      sendbuff[i] :=  Random(256) ;
      str := str +' '+inttohex( sendbuff[i] ,2);
    end;
    sendlen := 32;
    data := @sendbuff;
    WSocket1.Send( data, sendlen );
    Memo1.Lines.Add( Format('==>[%s:%s];Sendlen=%d; data:"%s"',
    [WSocket1.Addr,WSocket1.Port, sendlen, str]));
  end;
end;

procedure TForm1.WSocketServer1DataAvailable(Sender: TObject;
  ErrCode: Word);
  var
  buffer:array [0..1023] of Byte;
  recvLen:Integer;
  str,
  strData:string;i:Integer;
  client:TWSocketClient;
  readBuffer:Pointer;
begin
  client := TWSocketClient(Sender);
  if Assigned( client ) then
  begin
      FillChar(buffer,1024,0);
      recvLen := client.RcvdCount;
      readBuffer := @buffer;
      recvLen := client.Receive( readBuffer, recvLen );
      //str := client.ReceiveStr;
      strData :='';str:='';
      for i:=0 to recvLen-1 do  begin
        strData:=strdata+' '+inttohex( buffer[i], 2);
        str:=str+char( buffer[i] )
      end;
      Memo1.Lines.Add( Format('<==[%s:%s];RecvLen=%d; hex:"%s";data:"%s";',
      [client.GetPeerAddr,client.GetPeerPort,recvLen,trim(strdata),str]) );
  end;     
end;

procedure TForm1.WSocketServer1ChangeState(Sender: TObject; OldState,
  NewState: TSocketState);
begin
  case NewState of
     wsListening:
     begin
       Memo1.Lines.Add('TCP Server Start listening...')
     end;

  end;

end;

end.


相关文章推荐

ICS data lab总结

ICS data lab总结
  • PKU_ZZY
  • PKU_ZZY
  • 2016年10月08日 10:09
  • 1517

delphi的 ics的使用例子,ftp客户端上传的例子。

关于delphi的 ics的使用例子。我现在想做个ftp服务器和。现在给大家一个例子 关于连接函数应该很简单,这是上传的代码,供大家参考。  FtpClient1.HostDirName :=...

Delphi 安装ICS

下载完成后解压到你的指写目录! 1、在library里加入ICS->Delphi->Vc32目录。 2、从File->Open中打开ICS->Delphi->Vc32->IcsDel110.dpr...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi : record 记录类型 - 结构指针

unitUnit1;        interface      uses     Windows, Messages, SysUtils, Variants, Classes,Graph...
  • netwarm
  • netwarm
  • 2014年01月16日 15:49
  • 1525

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

快速利用第三方平台SDK,实现点对点语音通话

快速利用第三方平台SDK,实现点对点语音通话
  • eimysty
  • eimysty
  • 2016年01月20日 17:16
  • 1817

flex4Tree组件分层显示数据示例

  • 2012年12月11日 13:40
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ICS组件中WSocketServer与WSocketClient收到数据示例
举报原因:
原因补充:

(最多只允许输入30个字)