Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Избирательный подсчет входящего траффика


Автор: ArkaNN 11.7.2005, 08:49
Здравствуйте, Уважаемые!!!

Метод, описаный в теме http://forum.vingrad.ru/index.php?showtopic=49915 мне очень понравился, но в нем есть один недостаток для меня. Там нет никакой избирательности. Мне же надо не учитывать входящий траффик из локальной сети и сичтать весь остальной, т. е. из Интернета. Пока, что получается только методом "в лоб".

Код

type TRecvPacket = record
  Length: int64;
  IP_int: longword;
  IP_str: String;
end;

function GetRecvPacket(Socket: TSocket): TRecvPacket;
var Buff: array [1..1500] of Char;
    sa: sockaddr_in;
    l: integer;
begin
  result.Length:=recvfrom(Socket, Buff, SizeOf(Buff), 0, sa, l);
  try
    result.IP_int:=sa.sin_addr.S_addr;
    result.IP_str:=ConvertIP(sa.sin_addr.S_addr);
  except
    result.IP_int:=0;
    result.IP_str:='0.0.0.0';
    exit;
  end;
end;

procedure TForm1.Button1Click;
begin
  WSAStartup(MakeWord(2, 0), result);
  Socket:=OpenSocket(ASync, RAW);
  Traffic:=StrToInt(ReadFromFile(GetMainDir+'Data\Data2.adf'));
  while true do
  begin
    If Stop then
    begin
      WSACleanup;
      break;
    end;
    Packet:=GetRecvPacket(Socket);
    If (Packet.Length>0) and (Packet.IP_int [i]от 192.168.0.0 до 192.168.255.255[/i]) then
      Inc(Traffic, Packet.Length);
    Application.ProcessMessages;
  end;
end;


Но этот метод плохой, т. к. некоторые пакеты теряются и не считаются. Меня интересует уже очень давно: каким норамальным способом можно реализовать избирательный подсчет траффика (входящего)?

Заранее благодарен!!!

Автор: RA 19.7.2005, 02:41
Ну дык это пример от Rouse__ , а в каждом примере от него есть специальный подвох для нехороших человеков (в этом он сам признался).

Вот как сейчас вижу по этому куску кода максимальный размер пакета сущесвенно занижен до 1500 хотя он может быть больше. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)