zoukankan      html  css  js  c++  java
  • cross socket tcp客户端开发

    cross socket tcp客户端开发

    uses Net.SocketAPI, Net.CrossSocket.Base, Net.CrossSocket

    FCrossTcp: ICrossSocket;

    ICrossSocket说明

    CROSS SOCKET的TCP服务端和客户端都是使用ICrossSocket。

    接收消息事件

    procedure TForm1.OnReceived(Sender: TObject; AConnection: ICrossConnection; ABuf: Pointer; ALen: Integer);
    begin
      TThread.Queue(nil,
        procedure
        begin
          var ms: tstream := TMemoryStream.Create;
          ms.Size := ALen;
          ms.Write(ABuf^, ALen);
          ms.Position := 0;
          var ms2: tstream := TMemoryStream.Create;
          tzip.UnZipStream(ms, ms2);    //unzip
          ms.Free;
          ms2.Position := 0;
          var pack: tmsgpack := TMsgPack.Create;
          pack.DecodeFromStream(ms2);
          case pack.Force('cmd').AsInteger of
            cmd_query:
              begin
                form1.ClientDataSet1.Data := pack.Force('dataset1').AsVariant;
                form1.ClientDataSet2.Data := pack.Force('dataset2').AsVariant;
              end;
          end;
          pack.Free;
        end);
    end;
    

    创建TCP对象

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FCrossTcp := TCrossSocket.Create(1);
      FCrossTcp.OnReceived := OnReceived;
    end;
    

      连接TCP服务端

    procedure TForm1.Connect(ip: string; port: Word);
    begin
      FCrossTcp.Connect(ip, port,
        procedure(AConnection: ICrossConnection; ASuccess: Boolean)
        begin
          TThread.Queue(nil,
            procedure
            begin
              if ASuccess then
                form1.Button1.Enabled := false;
            end)
        end);
    end;
    

      向服务端发送请求

    procedure TForm1.execRemoteFunc(pack: TMsgPack);
    begin
      var Conns: TArray<ICrossConnection> := FCrossTcp.LockConnections.Values.ToArray;
      var Conn: ICrossConnection := Conns[0];
      var ms: TStream := TMemoryStream.Create;
      pack.EncodeToStream(ms);
      pack.Free;
      ms.Position := 0;
      Conn.SendStream(ms,
        procedure(AConnection: ICrossConnection; ASuccess: Boolean)
        begin
          ms.Free;
        end);
      FCrossTcp.UnlockConnections;
    end;
    

      断开连接

    procedure TForm1.DisConnect;
    begin
      FCrossTcp.DisconnectAll;
    end;
    

      

      

  • 相关阅读:
    codeforces 466D
    codeforces 360B
    codeforces 383D
    codeforces 679B
    codeforces 571B
    codeforces 494B
    CodeForces 660D Number of Parallelograms(n个点所能组成的最多平行四边形数量)
    算法竞赛模板 最短路
    算法竞赛模板 string中substr函数的运用
    HDOJ 1269 迷宫城堡(tarjan模板题)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11359526.html
Copyright © 2011-2022 走看看