indy tcpclient发送和接收

摘要:
以下代码用于将命令从客户端发送到服务器。收到命令后,服务器捕获屏幕并将其发送给客户端。客户端接收并保存显示客户端:varftmpStream:TFileStream;位图:Tbitmap;从IdTCPClient开始,如果连接到DisConnect;主机:=edtServerHost.text;端口:=StrToInt(edtSer
 
下面的代码是实现从客户端发送一个命令给服务端,
服务端接收到命令后截取屏幕并发送给客户端,客户端接收保存显示
客户端:
    var
    ftmpStream : TFileStream;
    bitmap:Tbitmap;
begin
try
with IdTCPClient do
    begin
    if connected then DisConnect;
    Host := edtServerHost.text;
    Port := StrToInt(edtServerPort.text);
    Connect;
    WriteLn('SRN');
    // delete if exists
    // in production situation you might store binary downloads like this in a cache folder
    if FileExists(ExtractFileDir(ParamStr(0)) + 'ServerScreen.bmp') then
        DeleteFile(ExtractFileDir(ParamStr(0)) + 'ServerScreen.bmp');
    ftmpStream := TFileStream.Create(ExtractFileDir(ParamStr(0)) + 'ServerScreen.bmp',fmCreate);
//   bmpstream.Clear;
//   bitmap:=Tbitmap.Create;
    while connected do
//      ReadStream(bmpStream,-1,true);
        ReadStream(fTmpStream,-1,true);
    FreeAndNil(fTmpStream);
    Disconnect;
    imgMain.Picture.LoadFromFile(ExtractFileDir(ParamStr(0)) + 'ServerScreen.bmp');
//      bitmap.LoadFromStream(bmpStream);
//      imgMain.Picture.Bitmap:=bitmap;
    end;
except
on E : Exception do
    ShowMessage(E.Message);
end;

服务端:
procedure TFMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
    s, sCommand, sAction : string;
    fStream : TFileStream;
    tBM : tbitmap;
begin
CS.Enter;
try
s := uppercase(AThread.Connection.ReadLn);
sCommand := copy(s,1,3);
sAction := copy(s,5,100);
if sCommand = 'SRN' then
    begin
    // in production version you would use a unique file name such as one generated
    // from a tickcount plus clint IP / id etc.
    // take snapshot
    GetBitMap();
    // copy file stream to write stream
    AThread.Connection.OpenWriteBuffer;
    AThread.Connection.WriteStream(bmpStream);
    AThread.Connection.CloseWriteBuffer;
    // free the file stream
    bmpstream.Clear;

    AThread.Connection.Disconnect;
    End
else
if (sCommand <> 'LST') and (sCommand <> 'PIC') and (sCommand <> 'SRN') then
    Begin
    AThread.Connection.WriteLn('ERR : Unknown command / action');
    AThread.Connection.Disconnect;
    end;
except
on E : Exception do
ShowMessage(E.Message);
End;
CS.Leave;
end;
 

免责声明:文章转载自《indy tcpclient发送和接收》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分布式应用运行时Dapr利用Python爬取fofa网页端数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

POI设置边框

对单元格设置边框时,有上下左右位置之分,所以POI也准备了四个不同的方法。值说明BORDER_DASH_DOTdash-dotborderBORDER_DASH_DOT_DOTdash-dot-dotborderBORDER_DASHEDdashborderBORDER_DOTTEDdotborderhair-lineborderBORDER_DOUBLEd...

收集vcftools所有用法

VCFtools用来处理VCF文档。vcftools--vcftest.vcflesstest.vcf|vcftools--vcf-Applyingafilter可以把筛选的突变写入一个新文件。--recode表示输出筛选的内容,--recode-INFO-all保留所有的INFOfields的内容。default情况下,INFOfields不写,因为筛选会...

xcode模拟器不显示键盘解决方案

当我们使用Xcode进行开发时,我们并不总是需要在iPhone上运行代码。有时模拟器可以解决这些问题。但当你使用模拟器时,你会发现,如果你使用模拟器上的键盘在TextFiled中输入信息,这是可以的,但如果你使用键盘输入信息,那么你会发现模拟器上的屏幕将不再显示。这是因为默认情况下,xcode使用计算机键盘作为外部键盘,不会弹出虚拟键盘。...

如何在Java应用中提交Spark任务?

我丈夫是一个用户定义的ID,作为参数传递给Spark应用程序;Spark初始化后,可以通过SparkContext_ ID和URL通过驱动程序连接到数据库,新版本关联关系的插入归因于互联网时代的信息爆炸。我看到了群友的聊天,了解了SparkLauncher。经过调查,我发现它可以基于Java代码自动提交Spark任务。因为SparkLauncher的类引用了...

neo4j修改密码

输入neo4j提供的可视界面,并输入::serverchange密码。键入原始密码和新密码以修改浏览器。在系统数据库(:usesystem)中,执行以下命令ALTERUSERneo4jSETPASSWORD“mynewpass”:;...

Windows Server 2019 Active Directory (AD域)时间不同步的解决方法

2.启用NTPServerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProviderNtpServer,将键Enabled的值修改为十进制的1。快速将所有注册表导入WindowsRegistryEditorVersion5.00[HHKEY_LOCAL_MACHINESOFTWAR...