局域网内传文件或文件内容

delphi7实现微型http服务器 DELPHI 7采用Indy 10组件实现的轻型WEB服务器的案例代码!可实现基础的网页服务功能,用来与B/S系统交互的不二之选! 立即下载
 
前一段时间由于工作需要写了一个局域网内传文件的小程序。后来在优快云上也看到了有朋友在发这样的帖子。于是整理了一下,发表出来。希望能对需要的朋友有所帮助。我也是初学。也可能在高手们看来这样的程序太菜了。呵呵。由于这个程序本来就很简单,我只是作了封装而已。在此的目的只是想把代码发表出来。所以不会对基本的概念性的知识再作解释。
     在这个程序当中我用了四个控件。TIdTCPServer、TIdTCPClient、TIdAntiFreeze、TIdIcmpClien。这四个控件都已封装在TGetFileClass类当中。
      下面是基本的功能有:
       一、Ping 功能。
       二、读文件的内容。
       三、读取整个文件。(基实也就是copy 文件)。
以下TGetFileClass文件。
{***********************使用说明************************************************}
//服务端说明
{1.创建TGetFileClass对象的实例
 2.设置ServerPort
 3.调用ServerStart方法
 4.设置ReadFilePath和ReadFileName
 5.停止调用ServerStop方法}
//客户端说明
{1.创建TGetFileClass对象的实例
 2.设置Host
 3.设置ClientPort
 4.调用ClientConnect方法
 5.在向服务端发出请求之前先调用PingForUsesBefor方法来拼一下服务器在调用此方法之
   前要对PingBufferSize 和 PingReceiveTimeout 属性. 根据PINGSERVER属性来判断。
 6.设置读取文件的类型ReadFileType属性
 7.如果是读取文件内容则调用ClientGetFileInfo
 8.如果是传文件则请在调用ClientGetFileInfo之前先设置SaveFilePath属性
 9.断开调用ClientDisConnect方法}
{*******************************************************************************}

unit uGetFileClass;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdAntiFreezeBase, IdAntiFreeze,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,IdTCPServer,StrUtils,
  IdIcmpClient,DateUtils;
Type
  //定义读取文件的方式(文件,文件内容)
  TReadFileType = (rtFile,rtFileInfo);
  TGetFileClass = class
  private
    FIdTCPServer: TIdTCPServer;   //服务器
    FIdTCPClient: TIdTCPClient;   //客户端
    FIdAntiFreeze: TIdAntiFreeze; //防止冻结(client)
    FIdIcmpClient: TIdIcmpClient; //Ping服务器
    FPingBufferSize : Integer ;    //PING的数据包的大小
    FPingReceiveTimeout : Integer ;//PING用时
    FHost : string;               //主机
    FClientPort : Integer;        //客户端口
    FServerPort : Integer;        //服务端口
    FSendData : string;           //发送数据
    FsCommand : string;           //命令
    FReadFileName : string;       //要读取的文件名
    FReadFilePath : string;       //要读取的文件路径
    FSaveFileName : String ;      //要保存的文件名(存放)
    FSaveFilePath : String ;      //要保存文件的路径
    FClientConnect : Boolean;     //客户端状态
    FServerStart : Boolean;       //服务端状态
    FClientResultInfo : string;   //客户端状态信息
    FServerResultInfo : string;   //服务端状态信息
    FFileInfo : TStrings;         //文件内容
    FReadFileType : TReadFileType ;       //读取文件的方式
  public
    procedure SetHost(const AHost : string) ;          //设置端口
    procedure SetClientPort(const APort : Integer);    //设置客户端口
    procedure SetServerPort(const APort : Integer);    //设置服务端口
    //要读取的
    procedure SetReadFileName(const AReadFileName : string);   //设置要读取的文件名
    procedure SetReadFilePath(const AReadFilePath : string);   //设置要读取的文件路径
    //要保存的
    procedure SetSaveFileName(const ASaveFilename : string) ;  //设置要保存的文件名
    procedure SetSaveFilePath(const ASaveFilePath : string) ;  //设置要保存的文件路径
    procedure SetReadFileType(const AReadFileType : TReadFileType); //设置读取文件的方式.
    procedure SetPingBufferSize(APingBufferSize : Integer);   //设置PING数据包的大小.
    procedure SetPingReceiveTimeout(APingReceiveTimeout : Integer);  //设置PING的用时。
    Function  GetClientResultInfo : string;            //返回客户端状态信息
    Function  GetServerResultInfo : string;            //返回服务端状态信息
    function ClientConnect : Integer;                  //客户端连接
    function ClientDisConnect : Integer;               //客户端断开
    function SendData(const AData : string ) : Integer;//发送数据
    function ClientGetFileInfo : Integer;              //向服务端请求文件
    Function ServerStart : Integer;                          //服务端启动
    Function ServerStop : Integer;                           //服务端停止
    procedure IdTCPServerConnect(AThread: TIdPeerThread);    //服务端连接
    procedure IdTCPServerExecute(AThread: TIdPeerThread);    //服务端执行
   
    //用PING控件测试服务器是否能联通.
    Function PingForUsesBefor : Boolean;
    //公布的属性。
    property Host : string read FHost write SetHost ;
    property ClientPort : Integer read FClientPort write SetClientPort ;
    property ServerPort : Integer read FServerPort write SetServerPort ;
    property ClientState : string read GetClientResultInfo ;  //客户端当前信息
    property ServerState : string read GetServerResultInfo ;  //服务端当前信息
    property FileInfo : TStrings read FFileInfo ;             //文件内容
    //需读取文件的路径和文件名.由用户指定.
    property ReadFilePath : String read FReadFilePath write  SetReadFilePath;
    property ReadFileName : String read FReadFileName write SetReadFileName;
    //保存文件的文件路径和文件名,由用户指定.
    property SaveFilePath : String read FSaveFilePath write SetSaveFilePath;
    property SaveFileName : String read FSaveFileName write SetSaveFileName;
    //读取文件的类型
    property ReadFileType : TReadFileType read FReadFileType write FReadFileType;
    //PING 服务的标示 TRUE 为通 FALSE 为不通
    property PingServer : Boolean read PingForUsesBefor;
    //拼值的数据包大小
    property PingBufferSize : Integer read FPingBufferSize  write SetPingBufferSize;
    //拼的时间
    property PingReceiveTimeout : Integer read FPingReceiveTimeout  write SetPingReceiveTimeout;
    constructor Create(Owner: TComponent);
    destructor Destroy ;override ;
  end;
implementation
{ TGetFileClass }
function TGetFileClass.ClientConnect: Integer;
begin
  Result := 0 ;
  if FIdTCPClient.Connected then FIdTCPClient.Disconnect;
  FIdTCPClient.Host := Host;
  FIdTCPClient.Port := ClientPort;
  with FIdTCPClient do
  begin
    Try
      Try
        Connect(50000);
        FClientResultInfo := ReadLn();
        FClientConnect := True;
      Except
        FClientResultInfo := '远程主机无响应!';
        FIdTCPClient.Disconnect;
        FClientConnect := False;
      end;
    Except
      FClientResultInfo := '无法建立到'+Host+'的连接!';
      Result := -1 ;
    end;
  end;
end;
function TGetFileClass.ClientDisConnect: Integer;
begin
  Result := 0 ;
  if FIdTCPClient.Connected then
  begin
    Try
      FIdTCPClient.WriteLn('QUIT');
    Finally
      FIdTCPClient.Disconnect;
      FClientConnect := False;
      FClientResultInfo := '同主机'+Host+'的连接已断开。';
    End;
  end;
end;
function TGetFileClass.ClientGetFileInfo: Integer;
var
  aFileSize,FileSize : Integer;
  Buff : array[0..1023] of Byte;
  ReadCount : Integer;
  FileInfoStream: TMemoryStream;
  FileStream : TFileStream;
  aFileName : string;
begin
  Result := 0 ;
  if FClientConnect then
  begin
    //发送命令
    FIdTCPClient.WriteLn('GetFile');
    //读取文件名
    aFileName := FIdTCPClient.ReadLn(#13#10, 100);
    if aFileName = '' then
      Exit;
    if FIdTCPClient.Connected then
    begin
      //返回确认文件传输标志
      FIdTCPClient.WriteLn;
      //开始读取文件长度,创建文件
      FIdTCPClient.ReadBuffer(aFileSize, 4);
      FileSize := aFileSize;
      //如果读取类型为文件内容
      if ReadFileType = rtFileInfo then
      begin
        FileInfoStream := TMemoryStream.Create;
        try
          //读取文件流
          repeat
            if FileSize - FileInfoStream.Size > SizeOf(Buff) then
              ReadCount := SizeOf(Buff)
            else
              ReadCount := FileSize - FileInfoStream.Size;
            FIdTCPClient.ReadBuffer(Buff, ReadCount);
            FileInfoStream.WriteBuffer(Buff, ReadCount);
            Application.ProcessMessages;
          until FileInfoStream.Size >= FileSize;
          FileInfoStream.Position := 0;   //定位流的指针位置从0开始读取数据.
          FFileInfo.Clear;
          FFileInfo.LoadFromStream(FileInfoStream);  //将文件的内容存放到FFILEINFO变量中。
        finally
          FileInfoStream.Free;
          FileInfoStream := nil;
        end;
      end
      else
      begin     //如果读取的类型是文件
        SaveFileName := aFileName;
        FileStream := TFileStream.Create(SaveFilePath+SaveFileName, fmCreate);
        try
          //读取文件流
          repeat
            if FileSize - FileStream.Size > SizeOf(Buff) then
              ReadCount := SizeOf(Buff)
            else
              ReadCount := FileSize - FileStream.Size;
            FIdTCPClient.ReadBuffer(Buff, ReadCount);
            FileStream.WriteBuffer(Buff, ReadCount);
            Application.ProcessMessages;
          until FileStream.Size >= FileSize;
        finally
          FileStream.Free;
          FileStream := nil;
        end;
      end;
    end;
  end;
end;
constructor TGetFileClass.Create(Owner: TComponent);
begin
  //在类的造构函数中创建服务器端和客户端组件.
  FIdTCPServer  := TIdTCPServer.Create(OWner);
  FIdTCPServer.OnConnect := IdTCPServerConnect;
  FIdTCPServer.OnExecute := IdTCPServerExecute;
  FIdTCPClient  := TIdTCPClient.Create(OWner);
  FIdAntiFreeze := TIdAntiFreeze.Create(OWner);
  FIdIcmpClient := TIdIcmpClient.Create(OWner);
  //创建存放文件内容的STRINGS变量。可以通过属性FILEINFO来读取文件的内容。
  FFileInfo := TStringList.Create;
end;
destructor TGetFileClass.Destroy;
begin
  //在析购函数中释放生成的对象。
  FIdTCPServer.Free;
  FIdTCPClient.Free;
  FIdAntiFreeze.Free;
  FFileInfo.Free;
  FIdIcmpClient.Free;
  inherited;
end;
function TGetFileClass.GetClientResultInfo: string;
begin
  //返回客户端当前的时实状态。可以通过ClientState属性来读取。
  Result := FClientResultInfo ;
end;
function TGetFileClass.GetServerResultInfo: string;
begin
  //返回服务器端当前的时实状态。可以通过ServerState属性来读取。
  Result := FServerResultInfo;
end;
procedure TGetFileClass.IdTCPServerConnect(AThread: TIdPeerThread);
begin
  FServerStart := True;
  AThread.Connection.WriteLn('欢迎连接到服务器!');
  FServerResultInfo := '来自主机 '+AThread.Connection.Socket.Binding.PeerIP+'的请求已被接受。';
end;
procedure TGetFileClass.IdTCPServerExecute(AThread: TIdPeerThread);
var
  Buf : array[0..1023] of Byte;
  ReadCount : Integer;
  aStream : TFileStream;
  aSize : Integer;
begin
  with AThread.Connection do
  begin
    FsCommand := ReadLn();
    if SameText(FsCommand,'QUIT') then
    begin
      FServerResultInfo := '断开同主机 '+AThread.Connection.Socket.Binding.PeerIP+'的连接!';
      DisConnect;
      FServerStart := False;
    end
    else if AnsiStartsText('Data',FsCommand) then
    begin
      FServerResultInfo := ReadLn();
      WriteLn('200:数据接收成功!');
    end
    else if SameText(FsCommand,'GetFile') then
    begin
       aStream := TFileStream.Create(ReadFilePath+ReadFilename,
                                          fmOpenRead or fmShareDenyWrite);
      try
        //发送文件名
        AThread.Connection.WriteLn(ReadFilename);
        //等待确认接收
        AThread.Connection.ReadLn(#13#10, 1000);
        //写文件长度和文件流
        aSize := aStream.Size;
        AThread.Connection.WriteBuffer(aSize,4);
        while aStream.Position < aStream.Size do
        begin
          if aStream.Size - aStream.Position >= SizeOf(Buf) then
            ReadCount := sizeOf(Buf)
          else
            ReadCount := aStream.Size - aStream.Position;
          aStream.ReadBuffer(Buf, ReadCount);
          AThread.Connection.WriteBuffer(Buf,ReadCount);
          Application.ProcessMessages;
        end;
      finally
        aStream.Free;
      end;
    end ;
  end;
end;
function TGetFileClass.SendData(const AData: string): Integer;
begin
  Result := 0 ;
  with FIdTCPClient do
  begin
    Try
      WriteLn('Data'+AData);
      FClientResultInfo := ReadLn();
    Except
      DisConnect;
      FClientConnect := False;
      FClientResultInfo := '同主机'+Host+'已断开。';
      Result := -1 ;
    End;
  end;
end;
function TGetFileClass.ServerStart: Integer;
begin
  Result := 0 ;
  Try
    FIdTCPServer.DefaultPort := ServerPort;
    FIdTCPServer.Active := True;
    FServerStart := True;
    FServerResultInfo := '服务器已成功启动!';
  Except
    Result := -1;
    FServerStart := False;
  End;
end;
function TGetFileClass.ServerStop: Integer;
begin
  Result := 0;
  Try
    FIdTCPServer.Active := False;
    FServerStart := False;
    FServerResultInfo := '服务器已关闭!';
  Except
    Result := -1 ;
  End;
end;
procedure TGetFileClass.SetClientPort(const APort: Integer);
begin                                  
  if APort <> FClientPort then
    FClientPort := APort;
end;
procedure TGetFileClass.SetReadFileName(const AReadFileName: string);
begin
  if AReadFileName <> FReadFileName then
    FReadFileName := AReadFileName;
end;
procedure TGetFileClass.SetReadFilePath(const AReadFilePath: string);
begin
  if AReadFilePath <> FReadFilePath then
    FReadFilePath := AReadFilePath;
end;
procedure TGetFileClass.SetHost(const AHost: string);
begin
  if AHost <> FHost then
    FHost := AHost;
end;
procedure TGetFileClass.SetSaveFileName(const ASaveFilename: string);
begin
  if ASaveFileName <> FSaveFileName then
    FSaveFileName := ASaveFileName;
end;
procedure TGetFileClass.SetSaveFilePath(const ASaveFilePath: string);
begin
  if ASaveFilePath <> FSaveFilePath then
    FSaveFilePath := ASaveFilePath ;                                   
end;
procedure TGetFileClass.SetServerPort(const APort: Integer);
begin
  if APort <> FServerPort then
    FServerPort := APort ;
end;
procedure TGetFileClass.SetReadFileType(
  const AReadFileType: TReadFileType);
begin
  if AReadFileType <> FReadFileType then
    FReadFileType := AReadFileType;
end;
Function TGetFileClass.PingForUsesBefor : Boolean;
var
  StartDate,EndDate,UseDate:Ttime;
  i : integer;
  temp,hm : word;
begin
  if PingBufferSize = 0 then PingBufferSize := 10000;
  if PingReceiveTimeout = 0 then PingreceiveTimeout := 5000;
 
  FIdIcmpClient.BufferSize := PingBufferSize ;
  FIdIcmpClient.ReceiveTimeout := PingReceiveTimeout;
  FIdIcmpClient.Host := Host;
  StartDate := now;
  for i := 0 to 1 do
  begin
    FIdIcmpClient.Ping;
  end;
  EndDate := Now;
  UseDate := StartDate - EndDate ;
  //取出秒数
  DecodeDateTime(UseDate,temp,temp,temp,temp,temp,hm,temp);
  if hm >=5 then
    result := False
  else
    Result := True;
end;
procedure TGetFileClass.SetPingBufferSize(APingBufferSize: Integer);
begin
  if APingBufferSize <> FPingBufferSize then
    FPingBufferSize := APingBufferSize;
end;
procedure TGetFileClass.SetPingReceiveTimeout(
  APingReceiveTimeout: Integer);
begin
  if APingReceiveTimeout <> FPingReceiveTimeout then
    FPingReceiveTimeout := APingReceiveTimeout;
end;
end.

服务器端调用方法:***********
var
    GetFileClass : TGetFileClass;
启动:
  GetFileClass.ServerPort := 6060;  //端口请自行更改。
  GetFileClass.ServerStart;              //启动服务器
  BtnStart.Enabled := false;
  BtnStop.Enabled := True;
  Btnclose.Enabled := false;
  LbLog.Items.Add(GetFileClass.ServerState);     //LbLog是一个TListBox~ServerState是服务当前的状态信息。
  GetFileClass.ReadFilePath := Extractfilepath(Application.ExeName);    //设置要读取文件的路径
  GetFileClass.ReadFileName := '1.txt';                                                  //设置要读取文件的名称 
*****************************
停止:
  GetFileClass.ServerStop;
  BtnStop.Enabled := FAlse;
  BtnStart.Enabled := True;
  BtnClose.Enabled := True;
  LbLog.Items.Add(GetFileClass.ServerState);
******************************************************************************************
客户端调用方法:
连接方法:
  GetFileClass.Host := EdtHost.Text;
  GetFileClass.ClientPort := 6060 ;                 //这个端口要和服务器一样才行。
  GetFileClass.ClientConnect;                        //连接服务器
  LbLog.Items.Add(GetFileClass.ClientState);
  BtnConnect.Enabled := False;
  BtnDisConnect.Enabled := True;
  BtnExit.Enabled := False;

向服务器发送消息:
  if GetFileClass.SendData('aaa') = -1 then
  begin
    Application.MessageBox('发送失败!','错误',MB_Ok);
  end;
  LbLog.Items.Add(GetFileClass.ClientState);

Ping服务器:
function PingServer: Boolean;
begin
  GetFileClass.PingBufferSize := 10000;
  GetFileClass.PingReceiveTimeout := 5000;
  Result := GetFileClass.PingForUsesBefor;        //Ping服务器.
end;

读取服务器上指定文件的内容或是整个文件:(主要是根据传入的参数来进行操作)
procedure GetFile(AReadFileType : TReadFileType) ;
begin
  if (not PingServer) then exit;
  //设置读取类型
  if AReadFileType = rtFileInfo then
  begin
    GetFileClass.ReadFileType := AReadFileType;
    //调用 GetFileclass类的ClientGetFileInfo 方法,向服务器发送指令.
    if GetFileClass.ClientGetFileInfo = -1 then exit;
    memo1.Clear;
    //获得的文件信息可由Getfileclass类的FileInfo 属性读取.
    memo1.Lines.AddStrings(GetFileClass.FileInfo);
    //清空.
    GetFileClass.FileInfo.Clear;
  end
  else
  begin
    GetFileClass.ReadFileType := AReadFileType;
    GetFileClass.SaveFilePath := 'F:/';//ExtractFilePath(Application.ExeName);
    if GetFileClass.ClientGetFileInfo = -1 then exit;
  end;

end;

断开服务器:
  GetFileClass.ClientDisConnect;      
  LbLog.Items.Add(GetFileClass.ClientState);
  self.BtnConnect.Enabled := True;
  self.BtnDisConnect.Enabled  := False;
  BtnExit.Enabled := True;
********************************************************************************************
 在Delphi7+Windows2000Server下运行成功。希望能对大家有所帮助。这个程序写的有点早了。请大家不要见笑。
 
 
35个Delphi7的Indy实例程序包 35个Indy实例程序,包含了该组件下的大部分控件的用法 立即下载

相关推荐

TIdTcpServer和TIdTcpClient内网通讯聊天小程序.rar

TIdTcpServer和TIdTcpClient内网通讯聊天小程序,可实现内网之间的聊天功能,包含全部源码,Delphi Xe7编译通过,可作为TIdTcpServer和TIdTcpClient范例使用。

局域网内发送文件的例子(IdUdpClient,IdUdpServer)

=局域网内发送文件的例子(IdUdpClient,IdUdpServer)2007-04-29==============服务端================unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, IdB

记录成长的每一步 4609

delphi7的IdTCPClient和IdTCPServer的write用法

delphi7的IdTCPClient和IdTCPServer的write用法

Delphi实例分析:远程传输数据和文件

[摘要] 在Windows操作系统的平台上,WinSock是首选的网络编程接口,用于在网络上传输数据和交换信息,它构成了Windows操作系统进行网络编程的基础。对于编写网络应用程序来说,WinSock是一门非常重要的并且必须掌握的知识,虽然现在有很多的工具如FTP程序可以在网络上传输数据和文件,但是通过WinSock编程具有更大的灵活性,因为它不需要关心网络连接的细节问题。 [关键字] D

beyondqd的专栏 3092

Delphi简单IDTCPsever和IDTCPclient应用

在程序中,服务端与客户端相连接后,应用readln和writerln实现两个程序字符串的链接

速腾R128雷达+海康全景相机ROS数据采集避坑实录:从‘雷达不转’到MATLAB标定的完整流程

本文详细记录了速腾R128激光雷达与海康威视全景相机在ROS环境下的数据采集与MATLAB标定全流程。从硬件配置的常见陷阱(如雷达旋转参数设置)、驱动编译的依赖管理,到多传感器同步的实战技巧和MATLAB标定方法,提供了完整的避坑指南和技术方案。特别针对RoboSense R128雷达和海康相机的特殊需求给出了具体解决方案。

weixin_28717807的博客 1219

delphi7中indy10服务器端idtcpserver客户端连接,断开,以及断开客户端报错解决方法

最近要写一个上位机软件,需要用到idtcpserver来接收客户端发来的数据,但是发现idtcpserver这个控件比较难控制,总是出现一些未知的错误,网上也找不到相关资料,只能自己一步步来研究了,经过1天的摸索,终于大功告成,共享出来,希望大家少走弯路。 FClientList: TList;  //用来存放客户端连接 maxconnect:integer; //最大连接数 proce...

6181

Ubuntu本地部署CodeX编程助手:CLI配置全指南

本地AI编程助手是当前开发者关注的核心技术趋势,指在不依赖云端API、保障代码隐私前提下,于本地环境运行具备代码理解、多语言补全与知识库检索能力的智能辅助工具。其技术原理涉及模型加载、API网关编排、向量数据库集成及系统级资源调度,关键价值在于可控性、低延迟与合规性。典型应用场景包括企业内网DevOps提效、边缘设备嵌入式开发支持,以及敏感代码场景下的离线编程增强。本文聚焦Ubuntu系统下基于CLI的手动配置路径,深入解析Ollama服务注册、Node.js版本锁定、API Key环境隔离及Qwen2.5

weixin_26804345的博客 594

Delphi7中Indy9-----IdTCPServer控件读取任意长度数据包的方法

IdTCPServer控件中的Execute事件,AThread有很多读取客户端数据的方法,但有没有发现,真的没有一款适合你,不是要求数据结尾的格式,就是要求数据长度,就是对任意长度的数据包没辙。坑爹啊! 有的人想用超时的方法来解决任意长度问题,但实际上也不尽如人意。通过阅读Indy的源代码,本人找到了一种简单而有效的方法,可以实现任意长度的数据读取,而且还非设置超时的方式。 在工程中放置TI...

anada85221的专栏 2003

基于GEC6818开发板的C/C++贪吃蛇小游戏

f.开始游戏(进入游戏,并没有马上开游戏,需要点击播放才能开始)2.相关宏,全局变量(可以根据自己需要进行修改)k.显示文字前的相关初始化。k.自定义font.h文件。1.需要的主要头文件。l.在开发板上显示字1。m.在开发板上显示字2。a.显示固定大小图片。h.线程1:获得坐标。

2301_77273301的博客 2132

01-SA8155P 冷启动强制进入EDL模式

冷启动EDL模式

静虚待令,有物混成 3088

程序员应该知道的关于Windows API、CRT和STL二三事

1.本文编写目的 本文是为了帮助一些人弄清一些关于Windows API, C运行时程序库(CRT), 和标准C++库(STL)的基本概念。有很多人甚至是有经验的程序员在这些概念上是含糊不清的甚至是有错误观点。如果你想知道他们是在什么基础上实现的并且一直没时间弄清楚这些概念,请花费点时间阅读下本文。 2. 基本概念 下面这幅图代表了WinAPI、CRT和STL三者之间的关系。

回忆的往昔 599

【AI 编程工具进阶用法】如何在Cursor、Trae等工具中使用Skills

OpenSkills是一个开源项目,用于在Cursor、Trae等AI编程工具中添加可复用、可组合的"能力模块"。安装流程包括:1)全局安装OpenSkills CLI工具;2)选择安装Anthropic官方Skills到项目或全局;3)创建AGENTS.md文件同步Skills;4)在AI工具中调用Skills。此外还介绍了UI/UX Pro Max Skill项目,通过npm安装后可为AI添加设计能力。这些Skills相当于为AI工具安装"高级技能包"

肌肉金轮的博客 3542

[轉]程序员应该知道的关于Windows API、CRT和STL二三事

程序员应该知道的关于Windows API、CRT和STL二三事

weixin_33937913的博客 121

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2388

量化交易 米筐 因子分组打分(成长因子)

分组动手练习 在米筐上因子数据没有处理,提供的很多因子没有默认分类,存在一些因子没有的情况,我们就选择一些常见的因子。 价值因子 质量因子 成长因子(历史名称) pe_ratio return_on_invested_capital in_revenue pcf_ratio du_return_on_equity inc_eps pb_ratio return_on_asset_net_profit inc_total_asset market_cap return_on_equ

廷益_飞鸟的博客 932
上一篇: 多播与广播
下一篇: 如何模拟输入用户名、密码来访问网络邻居
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值