⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketfiletrans_unit.~pas

📁 柴油机的控制和状态检测使用的是电子设备ECU,ECU内运行的程序(生产文件)要在柴油机下线前装入。装入程序使用的是罐装设备
💻 ~PAS
字号:
unit SocketFileTrans_Unit;

interface

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

type
  TSocketFileTrans_Form = class(TForm)
    ServerSocket1: TServerSocket;
    StatusBar1: TStatusBar;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Label2: TLabel;
    Label3: TLabel;
    ListBox3: TListBox;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
   Work_Directory:String;
   FileName:String;
   handle:file of char;
   File_Len:LongInt;
   SendBuf:array[0..511] of char;
   SendLen:Integer;
    { Public declarations }
  end;

var
  SocketFileTrans_Form: TSocketFileTrans_Form;

implementation

{$R *.dfm}

procedure TSocketFileTrans_Form.Button1Click(Sender: TObject);
begin
ServerSocket1.Active:=true;
StatusBar1.Panels[0].Text:='服务器处于监听状态';
end;

procedure TSocketFileTrans_Form.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 ListBox2.Items.Add('Client Connect:');
 ListBox2.Items.Add('   Port:'+inttostr(ServerSocket1.Socket.Connections[0].RemotePort));
 ListBox2.Items.Add('     IP:'+ ServerSocket1.Socket.Connections[0].RemoteAddress);
end;

procedure TSocketFileTrans_Form.ServerSocket1ClientDisconnect(
  Sender: TObject; Socket: TCustomWinSocket);
begin
 ListBox2.Items.Add('Client DisConnect');
end;

procedure TSocketFileTrans_Form.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ListBox2.Items.Add('Socket Error');
end;

procedure TSocketFileTrans_Form.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 buf:array[0..1023] of char;
 StrLen,len,i,dataLen:integer;
 S:String;
 T:String[255];
 BlockNo:LongInt;
 c,cmd:char;
begin
 len:=Socket.ReceiveLength;
 socket.ReceiveBuf(buf,len);
 //命令处理
 if (len>0) then
 begin
   if (ord(buf[0])=80)and(ord(buf[len-1])=5) then
    Begin
      case ord(buf[1]) of  //command
       1:begin    //Get ECU_NO
          AssignFile(handle,Work_Directory+'\'+FileName);
          reset(handle);
          dataLen:=0;
          Sendbuf[0]:=chr(80);   //head
          Sendbuf[1]:=#1;    //Command
          Sendbuf[2]:=#0;    //
          SendLen:=5;
          DataLen:=1;
          StrLen:=0;
          t:=FileName;
          //FileName
          SendBuf[SendLen]:=chr(Length(FileName));
          For i:=1 to Length(FileName) do
           begin
              SendBuf[SendLen+i]:=t[i];
              DataLen:=DataLen+1;
              StrLen:=StrLen+1;
           end;
          SendLen:=SendLen+StrLen+1;
          StrLen:=0;
          //FileLength
          T:=inttostr(Filesize(handle));
          SendBuf[SendLen]:=chr(Length(t));
          For i:=1 to Length(FileName) do
           begin
              SendBuf[SendLen+i]:=t[i];
              DataLen:=DataLen+1;
              StrLen:=StrLen+1;
           end;
          SendLen:=SendLen+StrLen+1;
          //DataLen
          SendBuf[3]:=chr(DataLen-(DataLen div 256)*256);
          SendBuf[4]:=chr((DataLen div 256));
          //tail
          SendBuf[SendLen]:=#5;
          SendLen:=SendLen+1;
          ServerSocket1.Socket.Connections[0].SendBuf(sendbuf,SendLen);
         end;
       2:begin    //Get FileData
          BlockNo:=ord(buf[6])*256+ord(buf[5]);
          cmd:=#2;   // Send Data
          Sendbuf[0]:=chr(80);   //head
          Sendbuf[1]:=#1;    //Command
          Sendbuf[2]:=#0;    //
          SendLen:=5;
          DataLen:=0;
          while not(eof(handle)) do
          Begin
            seek(handle,BlockNo*500+DataLen);
            read(handle,c);
            Sendbuf[SendLen+DataLen]:=c;
            DataLen:=DataLen+1;
            If (DataLen=500) then
            Begin
              break;
            end;
          end;
          If (DataLen<500) then
          begin
              CloseFile(handle);
              cmd:=#3;  //end
          end;
          Sendbuf[1]:=cmd;    //Command
          //DataLen
          SendBuf[3]:=chr(DataLen-(DataLen div 256)*256);
          SendBuf[4]:=chr((DataLen div 256));
          SendLen:=SendLen+DataLen;
          Sendbuf[SendLen]:=#5;
          SendLen:=SendLen+1;
          ServerSocket1.Socket.Connections[0].SendBuf(sendbuf,SendLen);
         end;

      end;                //command
    end;
 end;
end;

procedure TSocketFileTrans_Form.Button2Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[0].Close;
ServerSocket1.Active:=false;
StatusBar1.Panels[0].Text:='服务器处于非监听状态';

end;
procedure TSocketFileTrans_Form.Button3Click(Sender: TObject);
var
 S:String[255];
 Len,i:integer;
 Buf:Array[0..1023] of char;
begin
 s:=edit1.Text;
 len:=length(s);
 for i:=0 to len-1 do buf[i]:=s[i+1];
 ServerSocket1.Socket.Connections[0].SendBuf(buf,len);
end;

procedure TSocketFileTrans_Form.FormCreate(Sender: TObject);
begin
 GetDir(0,Work_Directory);
 ListBox3.Items.LoadFromFile(Work_Directory+'\param.txt');
 FileName:=ListBox3.Items.Values['FileName'];
end;

procedure TSocketFileTrans_Form.Button4Click(Sender: TObject);
begin
closeFile(handle);
end;

procedure TSocketFileTrans_Form.Button5Click(Sender: TObject);
begin
     AssignFile(handle,Work_Directory+'\'+FileName);
     reset(handle);

end;

procedure TSocketFileTrans_Form.Button6Click(Sender: TObject);
begin
 Edit2.Text:=inttostr(Filesize(handle));
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -