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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2016, 16:33   #1
vadimck
Новичок
Джуниор
 
Регистрация: 21.03.2016
Сообщений: 1
По умолчанию Передать данные через сокеты и изимерить скорость

Стоит задача сделать клиент серверное приложения на делфи. Нужно передать любые данные методом sendbuf, при этом задать размер буфера. Также нужно вывести скорость передачи. Перечитал много документации. пока только подключить клиент к серверу. помогите пожалуйста.
vadimck вне форума Ответить с цитированием
Старый 24.06.2016, 06:18   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
function TMain_form.DownloadFile(SourceFile, DestFile,
  names_files: string): Boolean;
const
  BufferSize = 512;
  var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: Cardinal;
  stope,hh:integer;
  f: File;
  sAppName,ggga,fulee: string;
  PBuffer: Pointer;
begin
  try
  result:=true;
  My_DeleteFile(DestFile);
  fulee:='Проверка файла '+ExtractFileName(names_files);

  lbl1.Caption:=fulee;
  lbl1.Repaint;

  ProgressBar1.Min:=0;
  hh:=(GetHttpFileSize(SourceFile));
  ProgressBar1.Max:=hh;
  if (ProgressBar1.Max>200) and (ProgressBar1.Max<250) then
  begin
  application.ProcessMessages;
  IdHTTP1.Get(SourceFile);
  end;
  application.ProcessMessages;
  ggga:=' Кб из '+formatfloat('0.00',(ProgressBar1.Max/1024))+' Кб';
  lbl1.Caption:=names_files+' 0'+ggga;
  ProgressBar1.Position:=0;
  PBuffer := @Buffer;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,PChar('192.168.1.201'), nil, 0);
  try
  fulee:='Загрузка файла:'+ExtractFileName(DestFile);
  lbl1.Caption:=fulee;
  lbl1.Repaint;
  ProgressBar1.Repaint;
    hURL := InternetOpenURL(hSession, PChar(SourceFile), nil, 0, INTERNET_FLAG_RELOAD, 0);
    try
       stope:=0;
      AssignFile(f, DestFile);
      Rewrite(f, 1);
      BufferLen:=BufferSize;
      while BufferLen <> 0 do
      begin
      Application.ProcessMessages;
        if InternetReadFile(hURL, PBuffer,SizeOf(Buffer), BufferLen)=false then  stope:=1;
        if stope=1 then   break;
        BlockWrite(f, Buffer, BufferLen);
        ProgressBar1.Position:=ProgressBar1.Position+BufferLen;
        lbl1.Caption:=fulee+' '+formatfloat('0.00',ProgressBar1.Position/1024)+ggga;
        lbl1.Refresh;
      end;
      CloseFile(f);
      if stope=0 then Result := True
                else Result := false;
    finally
     InternetCloseHandle(hURL);
     IdHTTP1.Disconnect;
    end
  finally
  IdHTTP1.Disconnect;
  InternetCloseHandle(hSession)
  end;
  except
  IdHTTP1.Disconnect;
  InternetCloseHandle(hURL);
  InternetCloseHandle(hSession);
  Result := false;
  end;


end;
оно?
ИЛи так
Код:
procedure TForm1.Server(str: string);
var line:string;
command:Integer;
begin
   try
    if IdTCPClient1.Connected=false then
    IdTCPClient1.Connect;

    str:=DeleteLineBreaks(str);
    Line:='';
    IdTCPClient1.IOHandler.WriteLn(str, IndyTextEncoding_UTF8);
    try
     Line := IdTCPClient1.IOHandler.ReadLn('',-1,2147483647,IndyTextEncoding_UTF8);
    except
      IdTCPClient1.IOHandler.WriteLn('Quit.', IndyTextEncoding_UTF8);
      IdTCPClient1.Disconnect(False);
      ShowMessage('Я не могу выбрать такой большой объем !!! Перезапустите программу и выберите поменьше');
      Exit;
    end;




     if pos('ERROR',line)=0 then
     begin

     command:=StrToInt(Copy(Line,1,2));
     Delete(Line,1,3);

      case command of
       10:find(Line);
      end;
     end
     else ShowMessage(Line);
     StatusBar1.Panels[1].Text:='Удачно';

     IdTCPClient1.IOHandler.WriteLn('Quit.', IndyTextEncoding_UTF8);
     IdTCPClient1.Disconnect(False);
   except
     try
       StatusBar1.Panels[1].Text:='Ошибка';
       //IdTCPClient1.IOHandler.WriteLn('Quit.', IndyTextEncoding_UTF8);
       IdTCPClient1.Disconnect;
     except
      StatusBar1.Panels[1].Text:='Ошибка отправки';
     end;
   end;
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 24.06.2016 в 06:23.
BARNEY вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти скорость камня через и время через которое камень упадет на землю rinoolik Помощь студентам 1 04.05.2013 14:06
POST запрос через сокеты GrabbeR C/C++ Сетевое программирование 0 17.01.2013 21:57
Передача массива через сокеты Kingcss Работа с сетью в Delphi 0 10.07.2011 16:14
Не отправляет файл через сокеты Nerig C++ Builder 0 19.05.2011 16:38
Передача файлов через сокеты Joker_vad Работа с сетью в Delphi 1 03.12.2010 12:09