Форум: "Сети";
Текущий архив: 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