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.


开源TCP/IP网络控件ICS

  • 2015年07月26日 18:09
  • 4.37MB
  • 下载

ICS课程中前6个lab的总结

时至暑假,好好回忆下上个学期ICS课程中CSAPP那本书上的6个lab。     Lab 1 : 位运算     貌似没什么好说的,学会SVN提交代码,然后就是智力题了。当时不清楚规则以为有30...
  • azard5
  • azard5
  • 2013年10月30日 15:04
  • 762

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

偶然一次得知了ICS组件在DELPHI7的应用较为稳定,于是找到了ICS组件,安装完成后,试验了一下,还是不错的。源码贴于下: unit Unit1; interface uses Wind...
  • dinglinger
  • dinglinger
  • 2013年12月05日 16:00
  • 1812

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

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

ICS bomb lab总结

ICS bomb lab总结
  • PKU_ZZY
  • PKU_ZZY
  • 2016年09月27日 09:29
  • 813

深入理解ICS和NAT

Internet是针对全局唯一的IP地址空间而设计的,每一个连接到Internet的接口都必须拥有一个基于该接口所连接子网的唯一Internet IP地址,因此不管此接口所在的子网在Internet上...
  • lidongying
  • lidongying
  • 2006年05月30日 20:48
  • 3847

航信三大系统ICS DCS CRS

转自:http://blog.sina.com.cn/s/blog_6d719f37010191m1.html 什么是GDS,全称是Global DistributionSystem...
  • u010050174
  • u010050174
  • 2015年10月10日 14:37
  • 2346

ICS lab 总结汇总

ICS lab 总结
  • PKU_ZZY
  • PKU_ZZY
  • 2017年02月08日 12:16
  • 1854

Windows ICS 服务无法启动问题解决

防火墙打不开肯定是"windows Firewall"服务没有启动。ICS服务启动不了可以通过以下方法解决: 1、找到本地连接,单击左键--属性--共享--勾选(√)--确定,如以上步骤不能开启IC...
  • Galdys
  • Galdys
  • 2013年05月29日 10:00
  • 54248

php 生成ics文件

项目用到了,百度没找到相关的答案,后来在github上的gist找到了代码。 源码只支持生成一个事件的ics,我现在改成了支持生成多事件(支持传入多维数组)。...
  • luhongji
  • luhongji
  • 2017年02月07日 21:23
  • 523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ICS组件中WSocketServer与WSocketClient收到数据示例
举报原因:
原因补充:

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