ICSTCP控件
delphi7代码:
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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本