首页 > 其他分享 >ICSTCP控件

ICSTCP控件

时间:2024-07-31 13:30:25浏览次数:8  
标签:控件 begin end Sender TObject ICSTCP str procedure

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.

来自:https://blog.csdn.net/nextop88/category_6887771_5.html

标签:控件,begin,end,Sender,TObject,ICSTCP,str,procedure
From: https://www.cnblogs.com/ljk2008/p/18334422

相关文章

  • 5.为工作使用正确的控件
    在本章中,我们将首先考虑WindowsPresentationFoundation(WPF)为我们提供的现有控件,并了解如何使用它们来创建我们需要的布局。我们将研究修改这些控件的多种方法,以避免创建新控件。我们将检查现有控件中内置的各个级别的功能,然后发现如何在需要时最好地声明我们自己的......
  • 6.调整内置控件
    每个.NET控件都有许多方法,每个方法都以前缀On命名,例如OnInitialized或OnApplyTemplate。这些是受保护的方法,可以在任何扩展.NET控件的自定义类中重写。它们在控件生命周期中的某些点被调用,使我们能够更改每个控件的默认行为。它们使我们能够做一些简单的事情,例......
  • 界面控件DevExpress WinForms,支持HTML & CSS提升用户体验(一)
    DevExpressWinForms现在可以利用HTML/CSS强大的功能,帮助受DevExpress驱动的WinForms应用程序引入现代的UI元素和用户体验!P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应......
  • 如何通过前端表格控件实现自动化报表?
    背景最近伙伴客户的项目经理遇见一个问题,他们在给甲方做自动化报表工具,项目已经基本做好了,但拿给最终甲方,业务人员不太买账,项目经理为此也是天天抓狂,没有想到合适的应对方案。现阶段主要面临的问题是项目经理和甲方沟通好了需求,就布置了任务,让研发去调研。但由于现在市面上报表......
  • Android 四大控件
    一、Activity  在Android应用中,Activity是一个非常核心的组件,用于表示应用的一个单一屏幕,是用户与应用交互的主界面。每个Activity提供一个窗口,用于绘制界面和接收与用户的交互事件。理解Activity的创建、生命周期和其基本用法对于开发Android应用至关重要。 一个......
  • 报表控件DevExpress Reporting v24.1 - 全新升级报表查看器功能
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpressReporting控件日前正式发布了v24.1,新版本重点针对报表查看器的一系列功能进行......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-55- 上传文件 (非input控件)- 中
    1.简介在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。2.上传文件的API(非input控件)Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员......
  • Android笔试面试题AI答之控件Views(6)
    答案来着文心一言,仅供参考目录1.简述什么是RemoteViews?使用场景有哪些?RemoteViews的特性使用场景总结2.获取View宽高的几种方法?1.在`onWindowFocusChanged`方法中获取2.使用`ViewTreeObserver.OnGlobalLayoutListener`3.使用`ViewTreeObserver.OnPreDrawListene......
  • Qt自定义控件
    开发系统:ubuntu22.04IDE:clion构建工具:cmakeQt自定义控件之插件形式插件形式是指将自定义控件按照一定的规则,生成动态库,放到Qtdesigner插件加载目录/usr/lib/x86_64-linux-gnu/qt5/plugins/designer下,Qtdesigner启动时加载,自定义控件就像内置控件一样可以直接拖拽。下面......
  • C#:winform使用chart控件绘制折线图,时间轴可缩放
    Chart坐标轴横轴为时间,纵轴是数值如果只是一次性绘图,那么遍历一遍数据即可如果想连续绘制(比如按照时间更新绘制),就需要一个Timer控件来更新绘图的数据。以下为项目代码:GUI界面添加一个Chart和一个timer即可 usingSystem;usingSystem.Collections.Generic;usingSystem.Comp......