unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, ComCtrls, StdCtrls, Gauges;
type
TForm1 =
class
(TForm)
Button1: TButton;
StatusBar1: TStatusBar;
ProgressBar1: TProgressBar;
ServerSocket1: TServerSocket;
Gauge1: TGauge;
OpenDialog1: TOpenDialog;
procedure
FormDestroy(Sender: TObject);
procedure
Button1Click(Sender: TObject);
procedure
ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure
ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure
ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
public
end
;
var
Form1: TForm1;
MS: TMemoryStream;
implementation
{$R *.dfm}
procedure
TForm1
.
FormDestroy(Sender: TObject);
begin
ServerSocket1
.
Close;
end
;
procedure
TForm1
.
Button1Click(Sender: TObject);
var
Size:
integer
;
P: ^
Byte
;
begin
MS := TMemoryStream
.
Create;
if
OpenDialog1
.
Execute
then
begin
MS
.
LoadFromFile(OpenDialog1
.
FileName);
ServerSocket1
.
Socket
.
Connections[
0
].SendText(
'file#'
+ ExtractFileName(OpenDialog1
.
FileName) +
'#'
+IntToStr(MS
.
Size)+
'#'
);
MS
.
Position :=
0
;
P := MS
.
Memory;
Size := ServerSocket1
.
Socket
.
Connections[
0
].SendBuf(P^, MS
.
Size);
ProgressBar1
.
Position := Size*
100
div
MS
.
Size;
Gauge1
.
Progress := Size*
100
div
MS
.
Size;
StatusBar1
.
SimpleText :=
'Отправлено '
+IntToStr(Size)+
' из '
+IntToStr(MS
.
Size)+
' байт'
end
;
end
;
procedure
TForm1
.
ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1
.
SimpleText :=
'Соединение установлено'
;
end
;
procedure
TForm1
.
ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1
.
SimpleText :=
'Соединение не установлено'
;
end
;
procedure
TForm1
.
ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if
Socket
.
ReceiveText =
'end'
then
begin
StatusBar1
.
SimpleText :=
'Клиент принял файл, можно закрыть программу'
;
MS
.
Free;
end
;
end
;
Клиенты в сети. Приём файлов от сервера...
<
div
align="center"><img src="http:
unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ScktComp, StdCtrls, Gauges, ExtCtrls;
type
TForm1 =
class
(TForm)
Label1: TLabel;
Label2: TLabel;
ClientSocket1: TClientSocket;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
ProgressBar1: TProgressBar;
Gauge1: TGauge;
StatusBar1: TStatusBar;
procedure
Writing(Text:
string
);
procedure
FormDestroy(Sender: TObject);
procedure
ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure
ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure
ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
private
Name:
string
;
Size:
integer
;
Receive:
boolean
;
MS: TMemoryStream;
public
end
;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure
TForm1
.
FormDestroy(Sender: TObject);
begin
ClientSocket1
.
Open;
Receive :=
false
;
end
;
procedure
TForm1
.
ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1
.
SimpleText :=
'Соединение установлено'
;
end
;
procedure
TForm1
.
ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1
.
SimpleText :=
'Соединение не установлено'
;
end
;
procedure
TForm1
.
Writing(Text:
string
);
Var
s:
string
;
begin
if
MS
.
Size < Size
then
MS
.
Write
(Text[
1
], Length(Text));
ProgressBar1
.
Position := MS
.
Size*
100
div
Size;
Gauge1
.
Progress := MS
.
Size*
100
div
Size;
StatusBar1
.
SimpleText :=
'Принято '
+IntToStr(MS
.
Size)+
' из '
+IntToStr(Size);
if
MS
.
Size = Size
then
begin
Receive :=
false
;
MS
.
Position :=
0
;
if
not
(DirectoryExists(ExtractFilePath(ParamStr(
0
)) +
'\' + '
Хранилище Файлов
')) then CreateDir(ExtractFilePath(ParamStr(0)) + '
\
' + '
Хранилище Файлов');
MS
.
SaveToFile(ExtractFilePath(ParamStr(
0
)) +
'\' + '
Хранилище Файлов\' + Name);
ClientSocket1
.
Socket
.
SendText(
'end'
);
MS
.
Free;
StatusBar1
.
SimpleText :=
'Файл принят,можно закрыть программу'
;
end
;
end
;
procedure
TForm1
.
ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
Rtext:
string
;
begin
Rtext := Socket
.
ReceiveText;
if
Receive
then
Writing(RText)
else
if
Copy(Rtext,
0
, Pos(
'#'
, Rtext) -
1
) =
'file'
then
begin
MS := TMemoryStream
.
Create;
Delete(Rtext,
1
, Pos(
'#'
, Rtext));
Name := Copy(Rtext,
0
, Pos(
'#'
, Rtext) -
1
);
Delete(Rtext,
1
, Pos(
'#'
, Rtext));
Size := StrToInt(Copy(Rtext,
0
, Pos(
'#'
, Rtext) -
1
));
Delete(Rtext,
1
, Pos(
'#'
, Rtext));
Label1
.
Caption :=
'Размер файла: '
+IntToStr(Size)+
' байт'
;
Label2
.
Caption :=
'Имя файла: '
+Name;
Receive :=
true
;
Writing(RText);
end
;
end
;
procedure
TForm1
.
Button1Click(Sender: TObject);
begin
ClientSocket1
.
Open;
Receive :=
false
;
Form1
.
Caption:=
'УСПЕШНОЕ ПОДКЛЮЧЕНИЕ'
;
end
;
procedure
TForm1
.
Button2Click(Sender: TObject);
begin
ClientSocket1
.
Close;
Form1
.
Caption:=
'ВЫ ОТКЛЮЧЕНЫ'
;
end
;
end
.