-
Здравствуйте товарищи!!!
У меня проблема нужно постоянно по таймеру получать содержимое фала txt который лежит на сервере.
Я сделал через idHTTP но при обрыве инета error и все не отваливалось, избавился от ошибки через try except но idHttp не продолжал сам работу при подключении.
Я решил сделать все на TClientSocket все хорошо но ответ от серверва приходит не полный, то есть содержимое txt файла приходит чуть больше половины а конца нет.
Помогите товарищи!
Заранее благодарю!
-
alekseyii © (05.10.10 9:56)
продолжал сам работу
а ты его заставлял? показывай как делал
-
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;
-
> но idHttp не продолжал сам работу при подключении.
А как он должен был продолжать? ХТТП так устроен, что если оборвалось, то всё, веники. Надо запрос повторять.
> Я решил сделать все на TClientSocket все хорошо но ответ
> от серверва приходит не полный, то есть содержимое txt файла
> приходит чуть больше половины а конца нет.
Значит, неправильно сделал. К сожалению, подробнее что-либо можно сказать только увидев, как оно сделано.
-
продолжал работу - после переподключения инета продолжал получать данные черз get запрос и обрабатывать полученное
-
> alekseyii © (05.10.10 10:21) [2]
Ты напрасно думал, что весь ответ придёт одним куском.
Читай порциями в цикле.
-
я и коннектил заново при выполнении except, но результата нет
сейчас хочу на ClientSocket Остановиться, только ответ не полный приходит :-(
-
> alekseyii © (05.10.10 10:22) [4]
> продолжал работу - после переподключения инета продолжал
> получать данные черз get запрос и обрабатывать полученное
Надо запрос выполнять заново. ХТТП сервер после обрыва соединения забывает про неудачливого клиента напрочь.
-
DiamondShark
это как?
n:='';
s:=ClientSocket1.socket.ReceiveText;
while s<>'' do
begin
n:=n+s;
s:=ClientSocket.socket.receiveText;
end;
-
пробывал так, но программа вылетает при обрыве.
procedure LoadMessage;
var
lm_s:string;
lm_i:integer;
begin
try
ChatData.Text:=form1.IdHTTP1.Get(chDat);
except
begin
sConnect;
LoadMessage;
end;
end;
...
end;
-
> alekseyii © (05.10.10 10:29) [9]
Это ты гениально придумал - бесконечная рекурсия)
-
хех!!
сейчас
изменил
StrIn.Text:=form1.ClientSocket1.Socket.ReceiveText
где StrIn: TStringList;
на
form1.memo1.text:=form1.ClientSocket.Socket.ReceiveText
Показал весь текст от начала до конца
впринципе и ответ не большой
какого тогда типа мне нужна переменная что бы не через memo сделать?
-
> Показал весь текст от начала до конца
Так звезды расположились)
> какого тогда типа мне нужна переменная что бы не через memo
> сделать?
TStringList
-
MyText:TCaption;
MyText:=form1.ClientSocket.Socket.ReceiveText;
тут весь текст
StrIn.Text:=MyText;
а теперь в StrIn.Text невесь :)
как мне теперь быть люди
-
> в StrIn.Text невесь
И чего не хватает ?
На основании чего ты вообще утверждаешь что "невесь" ?
-
А может про HTTP немного почитать? Что же метод "научного тыка" так популярен. Ведь в заголовке ответа содержится все необходимая информация...
-
Все пробуем Денис! и тыкаем и дергаем если уже в тупике, проблема решена, все по другой схеме протянул
Сергей Я знаю данные которые должна получить программа, на основании этого могу смело говорить что ответ не весь! :)
-
Я и спрашиваю - ЧЕГО не хватает ?)
-
> MyText:=form1.ClientSocket.Socket.ReceiveText;
>
> тут весь текст
> StrIn.Text:=MyText;
>
> а теперь в StrIn.Text невесь
Хм, пожал плечами и пошёл дальше.
-
> MyText:=form1.ClientSocket.Socket.ReceiveText;
>
> тут весь текст
> StrIn.Text:=MyText;
>
> а теперь в StrIn.Text невесь
Хм, пожал плечами и пошёл дальше.