Главная страница
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.022 c
1-1078420529
Sphinx
2004-03-04 20:15
2004.03.28
Установщики


1-1078486360
Романов Р.В.
2004-03-05 14:32
2004.03.28
Как сохранить картинку из TWebBrowser на диск?


1-1078907823
Leech
2004-03-10 11:37
2004.03.28
Columns в CheckListBox. How to USE?


14-1078348728
Style
2004-03-04 00:18
2004.03.28
Вот еще компонентик написал, оцените


14-1078001579
Layner
2004-02-28 23:52
2004.03.28
Люди, никто не ставил на комп где стоит NT2000, 98, 2й ОС?