📄 clientunit.pas
字号:
unit ClientUnit;
//说明: 这是一个简单的实例, 仅仅表明属性设置, 事件编程, 连接及连接情况,
// 发送数据,接收数据的全过程. 其中的发送和接收使用的方法
// SendText和ReceiveText 都是针对字符串的,
// 现实中的数据应该是二进制数据, 应该使用
// Sendbuf和Receivebuf ,处理过程也要复杂得多
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ScktComp, ExtCtrls;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket; //客户 Socket 控件
BitBtn1: TBitBtn; //连接按钮
Label1: TLabel; //显示连接情况
Memo1: TMemo; //键入发送内容的文本编辑器
Button1: TButton; //发送按钮
Memo2: TMemo; //存放接收到的内容
Label2: TLabel; //显示收到字符数
Button2: TButton; //断开按钮
Button3: TButton; //打开按钮
LabeledEdit1: TLabeledEdit; //编辑IP地址
LabeledEdit2: TLabeledEdit;
Label3: TLabel; //编辑Port号
procedure BitBtn1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject); //连接按钮
begin
ClientSocket1.ClientType:=ctNonBlocking; //选择无阻塞方式
ClientSocket1.Address:=LabeledEdit1.Text; //连接前设定IP地址
ClientSocket1.Port:=strtoint(Labelededit2.Text); //连接前设定 端口号
ClientSocket1.Active:=true; //连接的动作
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket); //连接成功的事件
begin
label1.Caption:='连接 OK!'; //连接成功的提示信息
Button1.Enabled:=true; //将发送按钮设为可用
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket); //连接失败事件
begin
label1.Caption:='无连接'; //连接失败时提示信息
Button1.Enabled:=false; //将发送按钮设为不能用
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(memo1.text); //发送memo1中的数据
memo1.Lines.Clear; //清理memo1
label3.Caption:='字符数'+inttostr(length(memo1.text));
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket); //读数据事件
var ss:string;
begin
ss:=ClientSocket1.Socket.ReceiveText; //及时获得服务器送来的信息
memo2.Lines.Add(ss); //将获得的字符串放进memo1,使之成为可见
Label2.Caption:='收到字符数'+inttostr(length(ss));
end;
procedure TForm1.FormShow(Sender: TObject); //屏幕初始事件
begin
LabeledEdit2.Text:=inttostr(ClientSocket1.Port); //屏幕上获得客户端口号
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Close; //关闭连接
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.ClientType:=ctNonBlocking; //选择无阻塞方式
ClientSocket1.Address:=LabeledEdit1.Text; //连接前设定IP地址
ClientSocket1.Port:=strtoint(Labelededit2.Text); //连接前设定 端口号
ClientSocket1.Open; //打开连接
//同 ClientSocket1.Active:=true 意思相同
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -