📄 socketfiletrans_unit.~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 + -