Конференция "Начинающим" » ClientSocket получает не полный ответ Help!!! [WinXP]
 
  • alekseyii © (05.10.10 09:56) [0]
    Здравствуйте товарищи!!!
    У меня проблема нужно постоянно по таймеру получать содержимое фала txt который лежит на сервере.
    Я сделал через idHTTP но при обрыве инета error и все не отваливалось, избавился от ошибки через try except но idHttp не продолжал сам работу при подключении.
    Я решил сделать все на TClientSocket все хорошо но ответ от серверва приходит не полный, то есть содержимое txt файла приходит чуть больше половины а конца нет.
    Помогите товарищи!
    Заранее благодарю!
  • Slym © (05.10.10 10:16) [1]
    alekseyii ©   (05.10.10 9:56)
    продолжал сам работу

    а ты его заставлял? показывай как делал
  • alekseyii © (05.10.10 10:21) [2]
    procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    begin

    StrIn.Text:= form1.ClientSocket1.Socket.ReceiveText;
    ReadInContent;
    form1.Memo1.Text:='SERVER ->>'+#13#10+StrIn.Text;

    end;

    StrIn:TStringList;
  • DiamondShark © (05.10.10 10:21) [3]

    > но idHttp не продолжал сам работу при подключении.

    А как он должен был продолжать? ХТТП так устроен, что если оборвалось, то всё, веники. Надо запрос повторять.


    > Я решил сделать все на TClientSocket все хорошо но ответ
    > от серверва приходит не полный, то есть содержимое txt файла
    > приходит чуть больше половины а конца нет.

    Значит, неправильно сделал. К сожалению, подробнее что-либо можно сказать только увидев, как оно сделано.
  • alekseyii © (05.10.10 10:22) [4]
    продолжал работу - после переподключения инета продолжал получать данные черз get запрос и обрабатывать полученное
  • DiamondShark © (05.10.10 10:23) [5]

    > alekseyii ©   (05.10.10 10:21) [2]

    Ты напрасно думал, что весь ответ придёт одним куском.
    Читай порциями в цикле.
  • alekseyii © (05.10.10 10:24) [6]
    я и коннектил заново при выполнении except, но результата нет
    сейчас хочу на ClientSocket Остановиться, только ответ не полный приходит :-(
  • DiamondShark © (05.10.10 10:24) [7]

    > alekseyii ©   (05.10.10 10:22) [4]
    > продолжал работу - после переподключения инета продолжал
    > получать данные черз get запрос и обрабатывать полученное

    Надо запрос выполнять заново. ХТТП сервер после обрыва соединения забывает про неудачливого клиента напрочь.
  • alekseyii © (05.10.10 10:25) [8]
    DiamondShark
    это как?
    n:='';
    s:=ClientSocket1.socket.ReceiveText;
    while s<>'' do
      begin
       n:=n+s;
       s:=ClientSocket.socket.receiveText;
      end;
  • alekseyii © (05.10.10 10:29) [9]
    пробывал так, но программа вылетает при обрыве.

    procedure LoadMessage;
    var
    lm_s:string;
    lm_i:integer;
    begin
    try                                
      ChatData.Text:=form1.IdHTTP1.Get(chDat);
    except
      begin
       sConnect;
       LoadMessage;
      end;
    end;

    ...

    end;
  • Сергей М. © (05.10.10 11:03) [10]

    > alekseyii ©   (05.10.10 10:29) [9]


    Это ты гениально придумал - бесконечная рекурсия)
  • alekseyii © (05.10.10 11:11) [11]
    хех!!
    сейчас
    изменил

    StrIn.Text:=form1.ClientSocket1.Socket.ReceiveText
    где StrIn: TStringList;

    на
    form1.memo1.text:=form1.ClientSocket.Socket.ReceiveText

    Показал весь текст от начала до конца
    впринципе и ответ не большой
    какого тогда типа мне нужна переменная что бы не через memo сделать?
  • Сергей М. © (05.10.10 11:17) [12]

    > Показал весь текст от начала до конца


    Так звезды расположились)


    > какого тогда типа мне нужна переменная что бы не через memo
    > сделать?


    TStringList
  • alekseyii © (05.10.10 11:19) [13]
    MyText:TCaption;

    MyText:=form1.ClientSocket.Socket.ReceiveText;

    тут весь текст

    StrIn.Text:=MyText;

    а теперь в StrIn.Text невесь :)

    как мне теперь быть люди
  • Сергей М. © (05.10.10 12:39) [14]

    > в StrIn.Text невесь


    И чего не хватает ?
    На основании чего ты вообще утверждаешь что "невесь" ?
  • Dennis I. Komarov © (05.10.10 15:28) [15]
    А может про HTTP немного почитать? Что же метод "научного тыка" так популярен. Ведь в заголовке ответа содержится все необходимая информация...
  • alekseyii © (25.10.10 11:21) [16]
    Все пробуем Денис! и тыкаем и дергаем если уже в тупике, проблема решена, все по другой схеме протянул

    Сергей Я знаю данные которые должна получить программа, на основании этого могу смело говорить что ответ не весь! :)
  • Сергей М. © (25.10.10 22:30) [17]
    Я и спрашиваю - ЧЕГО не хватает ?)
  • Похиш (26.10.10 00:23) [18]

    > MyText:=form1.ClientSocket.Socket.ReceiveText;
    >
    > тут весь текст


    > StrIn.Text:=MyText;
    >
    > а теперь в StrIn.Text невесь

    Хм, пожал плечами и пошёл дальше.
  • Похиш (26.10.10 00:23) [19]

    > MyText:=form1.ClientSocket.Socket.ReceiveText;
    >
    > тут весь текст


    > StrIn.Text:=MyText;
    >
    > а теперь в StrIn.Text невесь

    Хм, пожал плечами и пошёл дальше.
 
Конференция "Начинающим" » ClientSocket получает не полный ответ Help!!! [WinXP]
Есть новые Нет новых   [134437   +29][b:0][p:0.001]