Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача файла пакетами через clientsocket, передача файла пакетами через clientsock 
:(
    Опции темы
den2005r
Дата 5.2.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



всем привет. долбаюсь не первый день но так и не пойму почему не передаются или плохо передаются exe файлы размером по 70мб. и то допишет то не допишет подскажите получается не фига.......
обращение к отправке
Код:


 if ClientSocket1.Active then
  begin
  FStream:=TFileStream.Create(Edit2.Text,fmOpenRead);
  Send777(FStream, clientsocket1, Label18, ProgressBar1); 
 FStream.Free;
  end;

отправка
Код:


procedure tform1.Send777(FStream: TFileStream; Clientsocket: Tclientsocket;
           StatusLabel :Tlabel; ProgressBar :TProgressBar);
var
  i,j,count: integer;
  buf : array[1..9000] of Char;
begin
  i:=round(FStream.Size/9000);
  if (i*9000<FStream.Size) then i:=i+1;
  ProgressBar.Max:=i;

  clientsocket.socket.Sendtext('count'+IntToStr(i)+'#'+ExtractFileName(edit2.text)+'#'+inttostr(fstream.size)+'#');
  Application.ProcessMessages;
  for j:=1 to  i do
  begin
    if i=j then
    count:=FStream.Read(buf,FStream.Size-((i-1)*9000))
    else count:=FStream.Read(buf,length(buf));
    clientsocket.socket.SendBuf(buf,count);
    StatusLabel.Caption:='передача '+IntToStr(j)+' из '+IntToStr(i) ;
    ProgressBar.Position:=j;
   while get_accept=false do
    begin
     sleep(1);
     Application.ProcessMessages;
     end;
     get_accept:=false;
 end;
 Clientsocket.Socket.SendText('free');
  end;

прием
Код:


  if first_=false then
    begin
if copy(text,1,5)='count' then
begin
 delete(text,1,5);
    get_buffers:=StrToInt(copy(text,0,pos('#',text)-1));
      first_:=true;
   Label6.Caption:=inttostr(get_buffers);
delete(text,1,pos('#',text));
wa:=copy(text,0,pos('#',text)-1);
delete(text,1,pos('#',text));
razmer_file:=strtoint(copy(text,0,pos('#',text)-1));
Label19.caption:=inttostr(razmer_file);
rrr := TfileStream.Create('C:\'+wa,fmCreate);
get_buf_num:=0;
text:='';
ProgressBar1.Max:=razmer_file;
end;
    end
    else
    begin
    if pos('free',text)>0 then
    begin
    delete(text,1,4);
    first_:=false;
    end;
    adata:=TStringStream.Create(text);
    rrr.Position:=rrr.Size;
    rrr.CopyFrom(AData,AData.Size);
    Label20.caption:=inttostr(rrr.size);
    adata.free;
    get_buf_num:=get_buf_num+1;
    ProgressBar1.Position:=rrr.Size;
    Label7.Caption:=inttostr(get_buf_num);
    Serversocket1.socket.connections[0].Sendtext('*gotovo*');
    if first_=false then
    rrr.free;
 end;



Это сообщение отредактировал(а) den2005r - 5.2.2010, 13:49
PM MAIL   Вверх
kami
Дата 5.2.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Из кода ничего не понял, если честно.
Что за переменная GetAccept, откуда она берется и где выставляется в True
Непонятно, откуда при приеме берется text, почему он обнуляется периодически, хотя при приеме и передаче опустошать буфер вручную категорически нельзя.
Пройдитесь по нему трассировкой.
В дополнение - Вы учитываете в коде такие особенности работы TCP как разбиение и склейка пакетов?
Как пример: отправляем '123' и за ним '456'.
На прием может прийти:
'12' и потом '3456'
или '1234' и '56'
или '123456'.
Порядок следования байт будет тот же, а вот за сколько событий OnRead - это никому не известно. (это к слову про text='').
PM MAIL WWW   Вверх
den2005r
Дата 5.2.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



выставляется при принятии ответа о принятии пакета. я просто создаю строковый поток из которого копирую в файловый поток. освобождаю строковый поток. если файл готов освобождаю файловый поток.
Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  label tutu;
  var
text: string; // Принятый текст
adata:Tstringstream;
  str_buf : array[1..20] of Char;
 wa:string;
 razmer_file:integer;
 begin
// text:='';
 text := Socket.ReceiveText;

//memo3.Lines.add(text);
//if server then // Если клиент в режиме приёма файла, то...
//Writing(Text) // Записываем данные в буфер
//else // Если клиент не в режиме приёма файла, то...
//if Copy(text, 0, Pos('#', text) -1) = 'file' then // Если это файл, то...
//begin MS := TMemoryStream.Create; // Создаём буфер для файла
//Delete(text, 1, Pos('#', text)); // Определяем имя файла
//Name := Copy(text, 0, Pos('#', text) -1); // Определяем имя файла
//Delete(text, 1, Pos('#', text)); // Определяем размер файла
//Size := StrToInt(Copy(text, 0, Pos('#', text) -1)); // Определяем размер файла
//Delete(text, 1, Pos('#', text)); // Удаляем последний разделитель
//
//Label7.Caption := 'Размер принимаемого файла: '+IntToStr(Size div 1024)+' кбайт'; // Выводим размер файла
//Label6.Caption := 'Имя принимаемого файла: '+ExtractFileName(name); // Выводим имя файла
//server := true; // Переводим сервер в режим приёма файл
//qserver:=true; //состояние
//Writing(Text); // Записываем данные в буфер
//end;




    if first_=false then
    begin
if copy(text,1,5)='count' then
begin
 delete(text,1,5);

      first_:=true;

wa:=copy(text,0,pos('#',text)-1);
delete(text,1,pos('#',text));
razmer_file:=strtoint(copy(text,0,pos('#',text)-1));
Label19.caption:=inttostr(razmer_file);
rrr := TfileStream.Create('C:\'+wa,fmCreate);
//get_buf_num:=0;
text:='';
ProgressBar1.Max:=razmer_file;

end;
    end
    else
    begin
    if pos('free',text)>0 then
    begin
    delete(text,1,4);
    first_:=false;

    end;


    adata:=TStringStream.Create(text);
    rrr.Position:=rrr.Size;
    rrr.CopyFrom(AData,AData.Size);
    Label20.caption:=inttostr(rrr.size);
      adata.free;
    get_buf_num:=get_buf_num+1;
     //label21.caption:=inttostr(Longint(Trunc( (rrr.size * 100.0) / razmer_file )))+'%';
    ProgressBar1.Position:=rrr.Size;

    Label7.Caption:=inttostr(get_buf_num);
    sleep(1);
    Serversocket1.socket.connections[0].Sendtext('*gotovo*');
    if first_=false then
    rrr.free;

 end;
if pos('*gotovo*',text)>0 then
get_accept:=true;
end;



отправка
  if not FileExists(Edit2.Text) then Exit;
  if ClientSocket1.Active then
  begin
  FStream:=TFileStream.Create(Edit2.Text,fmOpenRead);

  Send777(FStream, clientsocket1, Label18, ProgressBar1); //запускаем поиск;

  FStream.Free;
  end;
   if serverSocket1.Active then
  begin
  FStream:=TFileStream.Create(Edit2.Text,fmOpenRead);

  Send888(FStream, serversocket1, Label18, ProgressBar1); //запускаем поиск;

  FStream.Free;


  end;
procedure tform1.Send888(FStream: TFileStream; serversocket: Tserversocket;
           StatusLabel :Tlabel; ProgressBar :TProgressBar);
var
  i,j,count,ty: integer;
  buf : array[1..9000] of Char;
begin
  i:=round(FStream.Size/9000);
  if (i*9000<FStream.Size) then i:=i+1;
  ProgressBar.Max:=i;

  serversocket.socket.Connections[0].Sendtext('count'+ExtractFileName(edit2.text)+'#'+inttostr(fstream.size)+'#');
  Application.ProcessMessages;
  for j:=1 to  i do
  begin
    if i=j then
    count:=FStream.Read(buf,FStream.Size-((i-1)*9000))
    else count:=FStream.Read(buf,length(buf));
    serversocket.socket.Connections[0].SendBuf(buf,count);
    StatusLabel.Caption:='передача '+IntToStr(j)+' из '+IntToStr(i) ;
    ty:=round(j/i*100);
    label21.Caption:=inttostr(ty)+'%';
    ProgressBar.Position:=j;
   while get_accept=false do
    begin
     sleep(1);
     Application.ProcessMessages;
     end;
     get_accept:=false;
 end;
serversocket.socket.Connections[0].SendText('free');
  end;








Это сообщение отредактировал(а) den2005r - 5.2.2010, 19:11
PM MAIL   Вверх
kami
Дата 5.2.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(den2005r @  5.2.2010,  19:08 Найти цитируемый пост)

wa:=copy(text,0,pos('#',text)-1);
delete(text,1,pos('#',text));
razmer_file:=strtoint(copy(text,0,pos('#',text)-1));
Label19.caption:=inttostr(razmer_file);
rrr := TfileStream.Create('C:\'+wa,fmCreate);

Читайте, пожалуйста, ответы полностью, а не через строчку. В особенности интересует, прочитали ли Вы про возможные разбиение и склейку пакетов?
Весь код не смотрел (ну не могу я читать неформатированный код, извините.), но уже по этому куску могу сказать:
а что если сперва придет 'count32791' а потом '44#'?
Это во-первых.
Во-вторых, то что Вы хотите отправить в сеть, и то что действительно отправлено - это две большие разницы, незря SendBuf возвращает, сколько действительно данных отправлено из запрошенных на отправку. Частично (в бОльшей степени) собака "порылась" здесь.

Цитата(den2005r @  5.2.2010,  19:08 Найти цитируемый пост)
о создаю строковый поток из которого копирую в файловый поток.

Зачем такие телодвижения? Почему сразу не записать в TFileStream?

Код

    if pos('free', text) > 0 then
        begin
          delete(text, 1, 4); // почему Вы уверены, что 'free' будет обязательно в первых четырех символах буфера, а не
                              // где-нибудь в середине ?
          first_ := false;
        end;


PM MAIL WWW   Вверх
den2005r
Дата 6.2.2010, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



count это команда на принятие файла далее идет имя файла но то ерунда. прийти 'count32791' а потом '44# не может идет всё вместе как не проверял.
о создаю строковый поток из которого копирую в файловый поток.
Зачем такие телодвижения? Почему сразу не записать в TFileStream? затем что не могу понять как писать сразу в поток.

Код

    if pos('free', text) > 0 then
        begin
          delete(text, 1, 4); // почему Вы уверены, что 'free' будет обязательно в первых четырех символах буфера, а не
                              // где-нибудь в середине ?
          first_ := false;
        end;

потому что отошлет этот текст тока по окончании цикла поэтому и уверен. в этом примере может где то и есть недочеты я не спорю. про склейку и расклейку пакетов ваще ничего незнаю... хочу его просто довести до ума. этот пимер передачи выдрал из передачи файла на протоколе udp и переделал под себя. всё получается тока некоторые exe файлы криво доходят остальные доходят как надо. я таким методом фильм передал и размер был байт в байт и совершенно не поврежден.... ах да есть ещё нагрузка на проц но я её убрал небольшой задержкой возможно это неправильный метод... как довести его до ума подскажите пожалуйста. заранее благодарен. если что стучите в асю 453174586
PM MAIL   Вверх
kami
Дата 6.2.2010, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
прийти 'count32791' а потом '44# не может идет всё вместе как не проверял.

Без комментариев.
Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
потому что отошлет этот текст тока по окончании цикла поэтому и уверен.

Последний раз говорю: если передали какой-то буфер, а за ним текст, то это не значит, что придет сперва буфер, а потом (отдельно) текст. Они вполне могут СКЛЕИТЬСЯ. и при приеме получится остаток_буфера_файла_'free'.
Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
в этом примере может где то и есть недочеты я не спорю.

И я на основные указал - это неучитывание разбиения/склейки пакетов и (главное) отсутствие анализа результата SendBuf.
Пока не осмыслите вышесказанные сообщения дальнейший диалог считаю бессмысленным. Посмотрите другие темы с участием TClient|TServerSocket в этом форуме.
Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
не могу понять как писать сразу в поток.

Код

if text<>'' then
  rrr.Write(text[1], Length(text)*SizeOf(Char));


Добавлено через 2 минуты и 54 секунды
Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
пимер передачи выдрал из передачи файла на протоколе udp и переделал под себя.

UDP и TCP это два совершенно разных протокола, и работать с ними нужно по разному.
UDP не гарантирует доставку буфера, но если буфер доставлен, то за ОДНО событие приема.
TCP гарантирует доставку буфера, но за сколько событий приема - никому не известно.

Добавлено через 4 минуты и 6 секунд
Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
я таким методом фильм передал и размер был байт в байт и совершенно не поврежден

Вам крупно повезло.

Это сообщение отредактировал(а) kami - 6.2.2010, 01:56
PM MAIL WWW   Вверх
den2005r
Дата 6.2.2010, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



Цитата

Цитата(den2005r @  6.2.2010,  01:38 Найти цитируемый пост)
я таким методом фильм передал и размер был байт в байт и совершенно не поврежден

Вам крупно повезло.

причем не один раз. да все файлы с любым расшиоением норм передаёт аот тока на некоторых exe файлах обрывается почему то.  
Цитата

отсутствие анализа результата SendBuf

это while clientsocket.socket.SendBuf(buf,count)<>count do sleep(10);   или я не прав?
Цитата

неучитывание разбиения/склейки пакетов

обьясни пожалуйста... оч хочется узнать как и что... долбусь не один день...
или как лучше передавать фала на сокетах тока чтоб можно было выводить прогресс отдачи и приёма в сети не смог найти

Это сообщение отредактировал(а) den2005r - 6.2.2010, 03:10
PM MAIL   Вверх
kami
Дата 6.2.2010, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(den2005r @  6.2.2010,  03:08 Найти цитируемый пост)
это while clientsocket.socket.SendBuf(buf,count)<>count do sleep(10);   или я не прав?

Нет. Это (если Buf:string, переменная экземпляра класса)
Код

// в событии OnWrite
begin
  Writed:=Socket.SendBuf(buf[1], Length(buf));// отправляем буфер
  buf:=Copy(buf, writed+1, Length(buf)); // удаляем из буфера действительно отправленное
  if Length(buf)=0 then // если буфер передан полностью
    ReadNextBufferFromFile(buf); // считываем следующий
end;

Цитата(den2005r @  6.2.2010,  03:08 Найти цитируемый пост)
обьясни пожалуйста


Цитата(kami @  5.2.2010,  18:51 Найти цитируемый пост)
отправляем '123' и за ним '456'.На прием может прийти:'12' и потом '3456'или '1234' и '56'или '123456'.Порядок следования байт будет тот же, а вот за сколько событий OnRead - это никому не известно. 

Общий принцип работы приемной части:
имеем буфер (в private секции класса).
Код

// в OnRead
buf:=buf+Socket.ReceiveText;
repeat
if заголовок_не_принят then
  if в_буфере_вся информация then
    begin
      FFileName:=Copy(buf, 1, 130); // цифры взяты с потолка, правильнее пользоваться Pos и PosEx, если длина не фиксирована
      FFileSize:=Copy(buf, 131, 30); // то же замечание
      buf:=Copy(buf, 161, Length(buf)); // убрали заголовочную информацию, теперь
      // если кроме заголовка мы "зацепили" при приеме начало файла, то в буфере осталось только оно.
      создаем_файл
    end
  else
    break;
if был_принят_заголовок и файл_создан then
  if (myFile.Size<FFileSize) then
    begin
      CanWrite:=Min(Length(buf), FFileSize-myFile.Size);
      Writed:=myFile.Write(buf[1], CanWrite);
      buf:=Copy(buf, Writed+1, Length(buf));
    end
  else
    begin
      FreeAndNil(myFile);
      выставляем флаг заголовок_не_принят.
    end;
until buf='';


Это сообщение отредактировал(а) kami - 6.2.2010, 14:29
PM MAIL WWW   Вверх
den2005r
Дата 6.2.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



спасибо за обьяснение кое что понял. хотя не толком но разберусь. слушай а вот переменные       CanWrite и Writed я так понял string или я ошибаюсь?
и 
Цитата

в_буфере_вся информация
 это как делать???  smile 

Это сообщение отредактировал(а) den2005r - 6.2.2010, 14:30
PM MAIL   Вверх
kami
Дата 6.2.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(den2005r @  6.2.2010,  14:24 Найти цитируемый пост)
CanWrite и Writed я так понял string

Неправильно понял.
Смотри хелп по функциям min и TStream.Write, а именно - какой тип они возвращают.

Добавлено через 5 минут и 54 секунды
Цитата(den2005r @  6.2.2010,  14:24 Найти цитируемый пост)
это как делать???   

А я откуда знаю, какой выбран признак конца приема заголовка?
Вроде, заголовок у Вас состоит из:
признак_начала+имя_файла+размер_файла+признак_конца.
Вот по признаку_конца заголовка и нужно ориентироваться.
PM MAIL WWW   Вверх
den2005r
Дата 6.2.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



так поток файловый будет или TStream простой?
и по скока лучше разбмвать файл... я думаю может разбивать его так чтоб пакет весил 10кб как ты думаешь?

Это сообщение отредактировал(а) den2005r - 6.2.2010, 15:04
PM MAIL   Вверх
kami
Дата 6.2.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(den2005r @  6.2.2010,  15:02 Найти цитируемый пост)
так поток файловый будет или TStream простой?

Все виды потоков - наследники абстрактного TStream.
RTFM. Примеров в сети именно по TCP протоколу хватает.
Удачи.
PM MAIL WWW   Вверх
kami
Дата 6.2.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



В завершение - код, который я использую для простых задач по сетевому обмену.
Код неплохо комментирован.
Правда, без доработки он не будет отображать, сколько данных реально передано/принято.

Присоединённый файл ( Кол-во скачиваний: 156 )
Присоединённый файл  SimpleTCPTransfer1.zip 10,97 Kb
PM MAIL WWW   Вверх
den2005r
Дата 6.2.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



спасибо огромное. ато в сети чето не могу найти не чего толкового

PM MAIL   Вверх
den2005r
Дата 6.2.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



Цитата

Нет. Это (если Buf:string, переменная экземпляра класса)
Выделить всёкод Pascal/Delphi

    
// в событии OnWrite
Код

begin
  Writed:=Socket.SendBuf(buf[1], Length(buf));// отправляем буфер
  buf:=Copy(buf, writed+1, Length(buf)); // удаляем из буфера действительно отправленное
  if Length(buf)=0 then // если буфер передан полностью
    ReadNextBufferFromFile(buf); // считываем следующий
end;


а если это buf : array[1..10000] of Char; тогда как? и если это отдельная процедура
такая вот
Код

procedure tform1.Send777(FStream: TFileStream; Clientsocket: Tclientsocket;
           StatusLabel :Tlabel; ProgressBar :TProgressBar);
var
  i,j,count,ty,writed: integer;
  buf : array[1..10000] of Char;
begin
  i:=round(FStream.Size/10000);
  if (i*10000<FStream.Size) then i:=i+1;
  ProgressBar.Max:=i;
 clientsocket.socket.Sendtext('count'+ExtractFileName(edit2.text)+'#'+inttostr(fstream.size)+'#');
    while yes=false do
    begin
     sleep(10);
     Application.ProcessMessages;
     end;
  Application.ProcessMessages;
  for j:=1 to  i do
  begin
    if i=j then
    count:=FStream.Read(buf,FStream.Size-((i-1)*10000))
    else count:=FStream.Read(buf,length(buf));
clientSocket.socket.SendBuf(buf[1], count);// отправляем буфер

    StatusLabel.Caption:='передача '+IntToStr(j)+' из '+IntToStr(i) ;
    ty:=round(j/i*100);
    label21.Caption:=inttostr(ty)+'%';
    ProgressBar.Position:=j;
//   while get_accept=false do
//    begin
//     sleep(10);
//     Application.ProcessMessages;
//     end;
//     get_accept:=false;
 end;
 sleep(1000);
 Clientsocket.Socket.SendText('free');
  end;

обращение к ней
Код

 FStream:=TFileStream.Create(Edit2.Text,fmOpenRead);
  Send777(FStream, clientsocket1, Label18, ProgressBar1); //запускаем поиск;
  FStream.Free;



Это сообщение отредактировал(а) den2005r - 6.2.2010, 21:30
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.