zoukankan      html  css  js  c++  java
  • indy 10.5.7的数据发送接收的用法

    发送结构体:
    TMyData = record
          id:Integer;
          Name:Array[0..20] of Char;
          Sex:Array[0..10] of Char;
          Age:Byte;
          Address:Array[0..256] of Char;
          UpdateTime:double;
      end;
    //发送结构体:
    procedure TForm2.Button2Click(Sender: TObject);
    var
      SendData:TMyData;
    begin

    SendData.ID:=10;
    StrPCopy(SendData.Name,'Wyatt');
    StrPCopy(SendData.Sex,'男');
    SendData.age:=25;
    StrPCopy(SendData.Address,'江苏省');
    SendData.UpdateTime:=Now;
    IdTCPClient1.IOHandler.Write(#99);//接收时便于区分接收的数据类型 自定义
    IdTCPClient1.IOHandler.Write(RawToBytes(SendData,SizeOf(SendData)));

    end;
    //发送TStrings类型
    procedure TForm2.Button3Click(Sender: TObject);
    var
       sList:TStrings;
       I:Integer;
    begin
      sList := TStringList.Create;
      for I :=0  to 30 do
      begin
        sList.Add('数据index' + IntToStr(i));
      end;
      IdTCPClient1.IOHandler.Write(#111);//接收时便于区分接收的数据类型 自定义
      IdTCPClient1.IOHandler.Write(sList.Count);
      IdTCPClient1.IOHandler.Write(ToBytes(sList.Text,TIdTextEncoding.UTF8));
    end;
    //发送一行字符串数据
    procedure TForm2.Button4Click(Sender: TObject);
    begin
    IdTCPClient1.IOHandler.Write(#12);//接收时便于区分接收的数据类型 自定义
    IdTCPClient1.IOHandler.Write('文星',TIdTextEncoding.UTF8);//中文要指定编码,接收时也要进行相应的转换,否则中文会显示成?号
    end;

    接收:
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
       ReadData:TMyData;
       buf:TIdBytes;
        sCmd:Char;
       sList:TStrings;
       I:Integer;
       ListCount:Integer;
    begin
       sCmd := AContext.Connection.IOHandler.ReadChar;
       if sCmd = #99 then  //接收结构体
       begin
         AContext.Connection.IOHandler.ReadBytes(buf,SizeOf(ReadData));
         BytesToRaw(buf, ReadData, SizeOf(ReadData));

         with Memo1.lines do

           begin

             Add('ID:'+Inttostr(ReadData.Id));

             Add('Name:'+StrPas(ReadData.Name));

             Add('Sex:'+ReadData.sex);

             Add('Age:'+Inttostr(ReadData.age));

             Add('UpdateTime:'+DateTimeToStr(ReadData.UpdateTime));

           end;
       end
       else if sCmd = #111 then  //接收 TStrings
        begin
          ListCount := AContext.Connection.IOHandler.ReadLongInt;
          sList := TStringList.Create;
          try
             AContext.Connection.IOHandler.ReadStrings(sList,ListCount,TIdTextEncoding.UTF8);
              for I :=0  to sList.Count-1 do
              begin
              Memo1.Lines.Add(sList.Strings[I]);
              end;
          finally
              sList.Free;
          end;
        end
        else if sCmd = #12 then
       begin
        Memo1.Lines.Add(AContext.Connection.IOHandler.ReadString(AContext.Connection.IOHandler.InputBuffer.Size,TIdTextEncoding.UTF8)
       end
      else
         AContext.Connection.IOHandler.InputBuffer.Clear;//清除不能识别的命令
    );
     
    end;

  • 相关阅读:
    极光推送SDK通过泰尔终端实验室检测,符合统一推送接口标准
    极光小课堂|手把手教你做接口测试
    一键登录怎么在iOS端实现?这篇文章教会你!
    一键登录已成大势所趋,Android端操作指南来啦!
    极光一键登录:更快捷、安全的登录认证方式,简单集成即可实现
    跨浏览器问题的五种解决方案
    Laravel 搭建 Composer 包,实现配置 Config、门面 Facade、服务 Service、发布到 Packagist
    How to Install ClamAV on Ubuntu 20.04 and Scan for Vulnerabilities
    单点登录(SSO)看这一篇就够了
    一口气说出 OAuth2.0 的四种授权方式
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940659.html
Copyright © 2011-2022 走看看