Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2008, 10:37   #1
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
Смущение Киллобитраж

Доброе время суток товарищи программисты!
Меня интересует такой вопрос...
Как узнать сколько байт или киллобайт было переданно через clientsocket или принято через serversocket?
Это нужно для статистики..
prizrak1390 вне форума Ответить с цитированием
Старый 27.04.2008, 10:51   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Каким методом передаёте/принимаете данные.
Методов полно как и путей решения вашего вопроса.

Код в студию.
Всё гениальное - просто!

Последний раз редактировалось Air; 27.04.2008 в 13:59.
Air вне форума Ответить с цитированием
Старый 27.04.2008, 10:53   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s : string;
begin
  s:= Socket.ReceiveText;
  if not Reciving then // приём окончен
  begin
    DataSize:= StrToInt(length(s));
    Reciving:= true;
  end;
end;
DataSize заранее глобально надо будет объявить и инициализировать (приравнять к нулю)
eoln вне форума Ответить с цитированием
Старый 27.04.2008, 10:58   #4
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s : string;
begin
  s:= Socket.ReceiveText;
  if not Reciving then // приём окончен
  begin
    DataSize:= StrToInt(length(s));
    Reciving:= true;
  end;
end;
DataSize заранее глобально надо будет объявить и инициализировать (приравнять к нулю)
Согласен, только если передаёте текстовые строчки, а если файл (ехе например), то не прокатит, т.к. но порциями(пакетами) приходит.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 27.04.2008, 11:36   #5
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

TO EOLN
Тоесть Datasize будет сожержать в себе количество символов из receivetext?? Спасибо конечно, но зачем мне это?
prizrak1390 вне форума Ответить с цитированием
Старый 27.04.2008, 12:04   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Вот, например, передача файла. AllSize будет показывать количество байт за все передачи, а не только для одного файла. Вот и вся статистика - по окончании программы заносите AllSize в какой-нибудь файл и наслаждайтесь.
Код:
var Data: TMemoryStream; 
Reciving: boolean;  
DataSize: integer;
AllSize: int64;
procedure TForm1.ClientSocket1Read(Sender: TObject;  
  Socket: TCustomWinSocket);  
var  
  s, sl: string;  
begin  
  s:= Socket.ReceiveText;  
  // Если мы не в режиме приёма:  
  if not Reciving then  
  begin  
    // Теперь нам необходимо получить длину потока данных.  
    SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator  
    StrLCopy(@sl[1], PChar(s), Length(sl)-1);  
    DataSize:= StrToInt(sl);  
    AllSize:=AllSize + DataSize;
    Data:= TMemoryStream.Create;  
    // Удаляем информацию о размере из данных.  
    Delete(s, 1, Length(sl));  
    Reciving:= true;  
  end;  
  // Сохраняем данные до тех пор, пока не получим все данные.  
  try  
    Data.Write(s[1], length(s));  
    if Data.Size = DataSize then  
    begin  
      Data.Position:= 0;  
      Объект.LoadFromStream(Data);  
      Data.Free;  
      Reciving:= false;  
      Socket.Close;  
    end;  
  except  
    Data.Free;  
  end;  
end;
eoln вне форума Ответить с цитированием
Старый 27.04.2008, 13:58   #7
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Сообщение от prizrak1390 Посмотреть сообщение
TO EOLN
Тоесть Datasize будет сожержать в себе количество символов из receivetext?? Спасибо конечно, но зачем мне это?
Всмысле?...

Цитата:
Сообщение от prizrak1390
Как узнать сколько байт или киллобайт было переданно через clientsocket или принято через serversocket?
Разве это ни одно и то же?
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 27.04.2008, 14:53   #8
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

Цитата:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s : string;
begin
s:= Socket.ReceiveText;
if not Reciving then // приём окончен
begin
DataSize:= StrToInt(length(s));
Reciving:= true;
end;
end;
Ну мы переменной S присваеваем присланный текст(receivetext)
потом в переменную DATASIZE мы присваиваем количество символов из строки S....или я не прав??

Цитата:
Сообщение от prizrak1390
Как узнать сколько байт или киллобайт было переданно через clientsocket или принято через serversocket?

Разве это ни одно и то же?
Одно и тоже.
prizrak1390 вне форума Ответить с цитированием
Старый 27.04.2008, 17:48   #9
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Ну мы переменной S присваеваем присланный текст(receivetext)
потом в переменную DATASIZE мы присваиваем количество символов из строки S....или я не прав??
Верно! это и есть размер переданной иформации.

Пример.
"Как дела?" - 9 символов, 9 байт.
"Дела прекрасно, а как твои?" - 27 символов, 27 байт.

итого в сумме 27+9=36 символов, 36 байт.
суммировать или нет Вы решите сами.

P.S. или я что-то не догоняю, вроде вопрос-то решённый... или нет?
Всё гениальное - просто!

Последний раз редактировалось Air; 27.04.2008 в 17:51.
Air вне форума Ответить с цитированием
Старый 27.04.2008, 18:43   #10
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

А если файл двоичный?
prizrak1390 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск