Главная страница
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
14-1074852867
stas
2004-01-23 13:14
2004.03.28
Мобилы


4-1074326910
Nikolay str
2004-01-17 11:08
2004.03.28
Как определить HWND меню


8-1060287687
Игорь Г.
2003-08-08 00:21
2004.03.28
Поворот изображения


8-1069105502
oens
2003-11-18 00:45
2004.03.28
Как, сделать, спектроанализатор ,как в winamp e ?


3-1077718214
Молот
2004-02-25 17:10
2004.03.28
Как в QR вывести текст выравняный по обеим краям?