http://blog.163.com/huangjian_w/blog/static/19437281200842010460625/
ICS网络编程Demo演示
近期有朋友和我讨论关于ICS编程的问题,其实ICS的C/S编程还是比较简单的。ICS的Server也是比较稳定的。不过它的实时性能却不怎么样,如果你的数据量不大客户端不超过1000估计没有问题。我曾经试验,如果流量超过每秒1Mbit/S,好几次Server都挂了。说明ICS在大流量的处理的性能还有待改进。不过我研究他也是考虑到他的稳定性。要好于indy组件。各有千秋嘛。
刚刚在看新闻,四川的地震实在太惨了,看不下去,上来发个代码,换换心情。今晚还要应付余震,听省地震局预报要持续到22号,哎,中国的多灾之年。坚信咱们一定能坚强度过,也默默祝愿大家平平安安。
//////////////////////////////服务器端代码/////////////////////////////////////////
unit u_main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket,
OverbyteIcsWSocketS;
type
TTcpSrvClient = class(TWSocketClient)
public
Logintype:integer;
ConnectTime : TDateTime;
end;
TForm1 = class(TForm)
mmo1: TMemo;
wscktsrvr1: TWSocketServer;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure wscktsrvr1ClientConnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
procedure wscktsrvr1ClientDisconnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ClientDataAvailable(Sender: TObject; Error: Word);
procedure ProcessData(Client : TTcpSrvClient);
procedure ClientBgException(Sender : TObject;
E : Exception;
var CanClose : Boolean);
procedure ClientLineLimitExceeded(Sender : TObject;
Cnt : LongInt;
var ClearData : Boolean);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
wscktsrvr1.Proto := 'tcp'; { Use TCP protocol }
wscktsrvr1.Port := '7000'; { Use telnet port }
wscktsrvr1.Addr := '0.0.0.0'; { Use any interface }
wscktsrvr1.ClientClass := TTcpSrvClient; { Use our component }
wscktsrvr1.Listen; { Start litening }
wscktsrvr1.Banner :='';
wscktsrvr1.BannerTooBusy := '';
mmo1.Lines.Add('转发启动。。。。。。');
end;
procedure TForm1.ClientBgException(Sender: TObject; E: Exception;
var CanClose: Boolean);
begin
end;
procedure TForm1.ClientDataAvailable(Sender: TObject; Error: Word);
begin
with Sender as TTcpSrvClient do
begin
mmo1.Lines.Add('接收数据(' +inttostr(RcvdCount) +'):'+ReceiveStr);
SendStr(ReceiveStr);
end;
end;
procedure TForm1.ClientLineLimitExceeded(Sender: TObject; Cnt: Integer;
var ClearData: Boolean);
begin
end;
procedure TForm1.ProcessData(Client: TTcpSrvClient);
begin
end;
procedure TForm1.wscktsrvr1ClientConnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
begin
with Client as TTcpSrvClient do begin
OnDataAvailable := ClientDataAvailable;
OnLineLimitExceeded := ClientLineLimitExceeded;
OnBgException := ClientBgException;
ConnectTime := Now;
mmo1.Lines.Add('客户端' + PeerAddr + '(' + PeerPort + ')登录');
end;
end;
procedure TForm1.wscktsrvr1ClientDisconnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
begin
with Client as TTcpSrvClient do begin
mmo1.Lines.Add('客户端' + PeerAddr + '(' + PeerPort + ')断开登录,在线:' + FormatDateTime('hh:nn:ss',Now - ConnectTime));
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
wscktsrvr1.Close;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
wscktsrvr1.Client[0].SendStr(edt1.Text);
end;
end.
//////////////////////////////////////////////////////////////////////////////客户端代码/////////////////////////////////////////////////////////////////////////
unit u_Client;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket;
type
TForm1 = class(TForm)
wsckt1: TWSocket;
btn1: TButton;
btn2: TButton;
btn3: TButton;
edt1: TEdit;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure wsckt1SessionAvailable(Sender: TObject; ErrCode: Word);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
wsckt1.Addr := '127.0.0.1';
wsckt1.Port := '7000';
wsckt1.Proto := 'TCP';
wsckt1.Connect;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
wsckt1.Close;
end;
procedure TForm1.btn3Click(Sender: TObject);
var
buf:array [0..100] of Char;
begin
StrPCopy(buf,edt1.Text);
wsckt1.Send(@buf,Length(edt1.Text));
end;
procedure TForm1.wsckt1SessionAvailable(Sender: TObject; ErrCode: Word);
begin
mmo1.Lines.Add('接收数据:'+wsckt1.ReceiveStr);
end;
end.
刚刚在看新闻,四川的地震实在太惨了,看不下去,上来发个代码,换换心情。今晚还要应付余震,听省地震局预报要持续到22号,哎,中国的多灾之年。坚信咱们一定能坚强度过,也默默祝愿大家平平安安。
//////////////////////////////服务器端代码/////////////////////////////////////////
unit u_main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket,
OverbyteIcsWSocketS;
type
TTcpSrvClient = class(TWSocketClient)
public
Logintype:integer;
ConnectTime : TDateTime;
end;
TForm1 = class(TForm)
mmo1: TMemo;
wscktsrvr1: TWSocketServer;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure wscktsrvr1ClientConnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
procedure wscktsrvr1ClientDisconnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ClientDataAvailable(Sender: TObject; Error: Word);
procedure ProcessData(Client : TTcpSrvClient);
procedure ClientBgException(Sender : TObject;
E : Exception;
var CanClose : Boolean);
procedure ClientLineLimitExceeded(Sender : TObject;
Cnt : LongInt;
var ClearData : Boolean);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
wscktsrvr1.Proto := 'tcp'; { Use TCP protocol }
wscktsrvr1.Port := '7000'; { Use telnet port }
wscktsrvr1.Addr := '0.0.0.0'; { Use any interface }
wscktsrvr1.ClientClass := TTcpSrvClient; { Use our component }
wscktsrvr1.Listen; { Start litening }
wscktsrvr1.Banner :='';
wscktsrvr1.BannerTooBusy := '';
mmo1.Lines.Add('转发启动。。。。。。');
end;
procedure TForm1.ClientBgException(Sender: TObject; E: Exception;
var CanClose: Boolean);
begin
end;
procedure TForm1.ClientDataAvailable(Sender: TObject; Error: Word);
begin
with Sender as TTcpSrvClient do
begin
mmo1.Lines.Add('接收数据(' +inttostr(RcvdCount) +'):'+ReceiveStr);
SendStr(ReceiveStr);
end;
end;
procedure TForm1.ClientLineLimitExceeded(Sender: TObject; Cnt: Integer;
var ClearData: Boolean);
begin
end;
procedure TForm1.ProcessData(Client: TTcpSrvClient);
begin
end;
procedure TForm1.wscktsrvr1ClientConnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
begin
with Client as TTcpSrvClient do begin
OnDataAvailable := ClientDataAvailable;
OnLineLimitExceeded := ClientLineLimitExceeded;
OnBgException := ClientBgException;
ConnectTime := Now;
mmo1.Lines.Add('客户端' + PeerAddr + '(' + PeerPort + ')登录');
end;
end;
procedure TForm1.wscktsrvr1ClientDisconnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
begin
with Client as TTcpSrvClient do begin
mmo1.Lines.Add('客户端' + PeerAddr + '(' + PeerPort + ')断开登录,在线:' + FormatDateTime('hh:nn:ss',Now - ConnectTime));
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
wscktsrvr1.Close;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
wscktsrvr1.Client[0].SendStr(edt1.Text);
end;
end.
//////////////////////////////////////////////////////////////////////////////客户端代码/////////////////////////////////////////////////////////////////////////
unit u_Client;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket;
type
TForm1 = class(TForm)
wsckt1: TWSocket;
btn1: TButton;
btn2: TButton;
btn3: TButton;
edt1: TEdit;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure wsckt1SessionAvailable(Sender: TObject; ErrCode: Word);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
wsckt1.Addr := '127.0.0.1';
wsckt1.Port := '7000';
wsckt1.Proto := 'TCP';
wsckt1.Connect;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
wsckt1.Close;
end;
procedure TForm1.btn3Click(Sender: TObject);
var
buf:array [0..100] of Char;
begin
StrPCopy(buf,edt1.Text);
wsckt1.Send(@buf,Length(edt1.Text));
end;
procedure TForm1.wsckt1SessionAvailable(Sender: TObject; ErrCode: Word);
begin
mmo1.Lines.Add('接收数据:'+wsckt1.ReceiveStr);
end;
end.
delphi lazarus opengl
网页操作自动化, 图像分析破解,游戏开发