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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2010, 11:47   #1
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
Злость передача файла пакетами через clientsocket

всем привет. долбаюсь не первый день но так и не пойму почему не передаются или плохо передаются 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;

Последний раз редактировалось D_E_N; 05.02.2010 в 13:48.
D_E_N вне форума Ответить с цитированием
Старый 25.03.2011, 01:14   #2
iplus32
Новичок
Джуниор
 
Регистрация: 25.03.2011
Сообщений: 1
По умолчанию

И никто не ответил... интересно... а ведь скорее всего нужно просто сделать паузу после отправки заголовка файла и перед передачей самого тела файла
iplus32 вне форума Ответить с цитированием
Старый 30.03.2011, 23:33   #3
Yougan
 
Регистрация: 30.03.2011
Сообщений: 7
По умолчанию

Попробуй не в цикле, а в таймере все это организовать
Yougan вне форума Ответить с цитированием
Старый 31.03.2011, 14:26   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Для отправки файла есть метод SendStream()
mss вне форума Ответить с цитированием
Старый 01.04.2011, 21:47   #5
Yougan
 
Регистрация: 30.03.2011
Сообщений: 7
По умолчанию

А для приема нет RecieveStream
Yougan вне форума Ответить с цитированием
Старый 02.04.2011, 17:25   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Ах какой печальный факт.
А еще для приема нет мозгов, способных заглянуть в исх.тексты компонента. Это уж совсем прискорбно.
mss вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача jpg-файла с компа на телефон через интернет sum42 Общие вопросы по Java, Java SE, Kotlin 1 22.12.2009 00:46
ClientSocket,ServerSocket передача данных Torvald Работа с сетью в Delphi 3 07.09.2009 03:59
Передача файла через сокет Delphi Unconnected Работа с сетью в Delphi 4 23.12.2008 16:16
Передача файла через TServerSocket и TClientSocket Vanya Работа с сетью в Delphi 10 08.04.2008 18:12