Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.03 c
1-1078906715
neg2001
2004-03-10 11:18
2004.03.28
Сервер приложений в виде WebService по Win2003


1-1078596486
Hkr
2004-03-06 21:08
2004.03.28
Глюк при сохранении.


6-1074584487
Winnet
2004-01-20 10:41
2004.03.28
Как же их установить?


7-1073425700
Cure
2004-01-07 00:48
2004.03.28
GetKeyNames


1-1078839959
Term
2004-03-09 16:45
2004.03.28
Как округлить число с точностью до 2-х знаков после запятой?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский