Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Учет количества переданных байт   Найти похожие ветки 

 
iWorm ©   (2004-01-12 04:44) [0]

Здравствуйте,
проблема как вы уже поняли в индикации, если можно так выразиться, кол-ва переданный байт.. Я использую сокеты.
Вот код серверной части:

procedure TForm1.Button2Click(Sender: TObject);
var
 sStream : TMemoryStream;
begin
 sStream := TMemoryStream.Create;
 if not OpenDialog1.Execute then
   Exit;
 sStream.LoadFromFile(OpenDialog1.FileName);
 form1.Caption := inttostr(sStream.Size);
 ServerSocket1.Socket.Connections[0].SendStreamThenDrop(sStream);
end;

а вот обрботчик на клиентской:

var
 Form1: TForm1;
 fStream: TFileStream;

const
 MAX_BUF_SIZE = $4095;

.......

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 fStream:= TFileStream.Create("Receive.fil", fmCreate);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 count :Integer;
 buffer: Array [0..MAX_BUF_SIZE] of Char;
begin
 repeat
   Socket.Lock;
   count:= Socket.ReceiveBuf(buffer,SizeOf(buffer));
   if count > 0 then
     fStream.WriteBuffer(buffer,count);
   Socket.Unlock;
 until (count <= 0);
 Edit1.text := (IntToStr(fStream.Size));
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 fStream.Free;
end;


как видите, если еще на клиентской чати все просто то на серверной мне не понятно как это по человечески сделать. Ну не отсылать же клиенту инфу о том скоко ему пришло.. Наверняка есть способ поинтересней;)
Заранее спасибо


 
Palladin ©   (2004-01-13 13:56) [1]

ага... count складывать...


 
iWorm ©   (2004-01-15 05:33) [2]

to Palladit
а на отправляющем сокете как сделать??


 
Verg ©   (2004-01-15 07:44) [3]

Насколько я понял, нужно сделать показ/учет прогресса передачи.

Если "влоб", то я определил бы класс - наследник TFileStream у которого перекрыл бы виртуальный метод Read

TMyFileStream = class(TFileStream)
public
 function Read(var Buffer; Count: Longint): Longint; override;
end;

implementation

function TMyFileStream.Read(var Buffer; Count: Longint): Longint;
begin
 result:=inherited Read(Buffer, Count);

 ProgressBar1.Position := Position;
end;

// Перепишем твою ф-цию Button2Click :

procedure TForm1.Button2Click(Sender: TObject);
var
sStream : TMyFileStream;
begin
if not OpenDialog1.Execute then
  Exit;
sStream := TMyFileStream.Create(OpenDialog1.FileName, fmOpenRead );
ProgressBar1.Max      :=  sStream.Size;
ProgressBar1.Position :=  0;

ServerSocket1.Socket.Connections[0].SendStreamThenDrop(sStream);
end;


 
iWorm ©   (2004-01-16 02:18) [4]

Verg
я не силен в делфи, но вы все правильно поняли:)
Читаю ваш код и понимаю, как реально глюканул, ведь все так просто.
Спасибо:)



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
1-1078420529
Sphinx
2004-03-04 20:15
2004.03.28
Установщики


1-1077896458
Гиричев Руслан
2004-02-27 18:40
2004.03.28
Перемещение в TreeView


4-1073988455
Freeman184
2004-01-13 13:07
2004.03.28
Как программно прикрепить файл к письму из Delphi?


14-1078140492
John S.
2004-03-01 14:28
2004.03.28
AVP кто нибудь юзает ?


6-1073907626
Anatolik
2004-01-12 14:40
2004.03.28
kak c помошью компанента WebBrowser можно соединится через