问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delphi XE8 TDSServer服务端怎样接收客户端消息

发布网友 发布时间:2022-12-22 08:35

我来回答

1个回答

热心网友 时间:2024-11-18 20:31

具体做法:
第一步、

建立一个Project新建From1拖入如下控件TServerSocket,TClientSocket,TMemo2个,Label四个,TEdit两个
TButton四个,TStatusBar。然后设置属性,ServerSocket1的Action为True;ServerSocket1的Port为1025
代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ScktComp;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Memo2: TMemo;
StatusBar1: TStatusBar;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
btnConnect: TButton;
btnSent: TButton;
btnDisconnect: TButton;
Button1: TButton;
Memo1: TMemo;
Label3: TLabel;
Label4: TLabel;
procere ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procere ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procere ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procere Button1Click(Sender: TObject);
procere ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procere btnConnectClick(Sender: TObject);
procere btnDisconnectClick(Sender: TObject);
procere btnSentClick(Sender: TObject);
procere ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

服务端代码////
procere TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := 'connect';
end;

procere TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := 'disconnect';
end;

procere TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('悄悄的对你说'+ Socket.ReceiveText);
end;

procere TForm1.Button1Click(Sender: TObject);
var i:integer;
begin

for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
Serversocket1.socket.connections[i].SendText(Memo1.Text);//服务端向客户端发送信息

end;

////客户端代码////
procere TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText:='连接成功';//状态栏显示状态
end;

procere TForm1.btnConnectClick(Sender: TObject);//输入IP和PORT连接
begin
if not ClientSocket1.Active then
begin
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Port := StrToInt(Edit2.Text);
ClientSocket1.Open;
(Sender as TButton).Enabled := false;
btnDisconnect.Enabled := true;
end;
end;

procere TForm1.btnDisconnectClick(Sender: TObject);//断开连接
begin
if ClientSocket1.Active then
begin
ClientSocket1.Close;
btnDisconnect.Enabled := false;
btnConnect.Enabled := true;
end;
end;

procere TForm1.btnSentClick(Sender: TObject);//连接成功后发送数据给服务端
begin
if ClientSocket1.Active then
ClientSocket1.Socket.SendText(Memo2.Text)
end;

procere TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);//客户端监听来自服务端的数据
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;

end.

第二步、

再新建一个project作为客户端2 建立Form1拖入控件TClientSocket,TMemo,TEdit两个,Label三个,TButton三个,TStatusBar

代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Memo2: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
btnConnect: TButton;
StatusBar1: TStatusBar;
btnSent: TButton;
btnDisconnect: TButton;
Label3: TLabel;
procere ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procere btnConnectClick(Sender: TObject);
procere btnDisconnectClick(Sender: TObject);
procere btnSentClick(Sender: TObject);
procere ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procere TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText:='连接成功';
end;

procere TForm1.btnConnectClick(Sender: TObject);
begin
if not ClientSocket1.Active then
begin
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Port := StrToInt(Edit2.Text);
ClientSocket1.Open;
(Sender as TButton).Enabled := false;
btnDisconnect.Enabled := true;
end;
end;

procere TForm1.btnDisconnectClick(Sender: TObject);
begin
if ClientSocket1.Active then
begin
ClientSocket1.Close;
btnDisconnect.Enabled := false;
btnConnect.Enabled := true;
end;
end;

procere TForm1.btnSentClick(Sender: TObject);
begin
if ClientSocket1.Active then
ClientSocket1.Socket.SendText(Memo2.Text)
end;

procere TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;

end.
————————————————
版权声明:本文为CSDN博主「尘中客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/s371795639/article/details/53976864
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 SK2大红瓶、雅诗兰黛精华霜、CPB晚霜对比评测 关于小规模纳税人自动升级成一般纳税人的问题 《天下第一剑客》最新txt全集下载 ...是不是会自动升成一般纳税人,还是要到税务局去备案? 《天下第一师兄》txt下载在线阅读全文,求百度网盘云资源 飞鹤线下专供的奶粉是什么奶粉、线上线下的一样吗 飞鹤星飞帆卓睿奶粉罐底部有区域标注 汽车蒸发箱清洗有必要吗为什么 天津市建筑工程职工大学2019年录取分数线是多少? 天津有疫情补贴政策吗 我国哪所高校预算居全国高校第一? 人鱼线到底在哪 不要复制黏贴 有没有输入首付就出现月供的软件? 华为平板录音锁屏后有显示怎么关掉 ...上市公司高管简历信息和每年各业务收入的免费金融数据库 免费注册公司:金融类公司可注册经营范围有哪些 苹果锁屏后重开怎么不弹录音界面 一般都在哪找金融信息,投 资可以用的? 谈谈雪花有几个花瓣???有何说法 电脑应急电源ups可以使用多少小时 Delphi XE8 如何去掉默认的代码连接线 delphi xe8需要4G以上内存? delphi xe8 发布程序要注册哪些函数 Delphi XE8安装完成,提示图片的文件。就是打不开。账号密码也写了就... 光焰万丈是什么生肖? 人之初菁嘉贝比奶粉里面的益生菌品质好么? 人之初菁嘉贝比奶粉中真的有益生菌么?适合消化不好,经常腹泻的宝宝吗... 我家宝宝经常腹泻,听说人之初菁嘉贝比奶粉里含益生菌,吃这个奶粉可以改 ... 国产游戏一般不封号 打牌什么名称不封号的 酋长相当于中国的什么官 像素生存者2内置修改器不封号 酋长在中国什么职位 非洲一些国家的酋长相当于中国的什么官? 魔兽世界一直在骂人为什么不封号 仙剑世界三不封号怎么玩 nba2k23怎么不封号 酋长当中国是什么官职 黑暗之魂3怎么改魂不封号 2022新国标电动车标准