![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ClientSocket получает не полный ответ Help!!! [WinXP]
alekseyii © (2010-10-05 09:56:00)Здравствуйте товарищи!!!
У меня проблема нужно постоянно по таймеру получать содержимое фала txt который лежит на сервере.
Я сделал через idHTTP но при обрыве инета error и все не отваливалось, избавился от ошибки через try except но idHttp не продолжал сам работу при подключении.
Я решил сделать все на TClientSocket все хорошо но ответ от серверва приходит не полный, то есть содержимое txt файла приходит чуть больше половины а конца нет.
Помогите товарищи!
Заранее благодарю!
Похиш (2010-10-26 00:23:00) [1]
> MyText:=form1.ClientSocket.Socket.ReceiveText;
>
> тут весь текст
> StrIn.Text:=MyText;
>
> а теперь в StrIn.Text невесь
Хм, пожал плечами и пошёл дальше.
Похиш (2010-10-26 00:23:00) [2]
> MyText:=form1.ClientSocket.Socket.ReceiveText;
>
> тут весь текст
> StrIn.Text:=MyText;
>
> а теперь в StrIn.Text невесь
Хм, пожал плечами и пошёл дальше.
Сергей М. (2010-10-25 22:30:00) [3]Я и спрашиваю - ЧЕГО не хватает ?)
alekseyii (2010-10-25 11:21:00) [4]Все пробуем Денис! и тыкаем и дергаем если уже в тупике, проблема решена, все по другой схеме протянул
Сергей Я знаю данные которые должна получить программа, на основании этого могу смело говорить что ответ не весь! :)
Dennis I. Komarov (2010-10-05 15:28:00) [5]А может про HTTP немного почитать? Что же метод "научного тыка" так популярен. Ведь в заголовке ответа содержится все необходимая информация...
Сергей М. (2010-10-05 12:39:00) [6]
> в StrIn.Text невесь
И чего не хватает ?
На основании чего ты вообще утверждаешь что "невесь" ?
alekseyii (2010-10-05 11:19:00) [7]MyText:TCaption;
MyText:=form1.ClientSocket.Socket.ReceiveText;
тут весь текст
StrIn.Text:=MyText;
а теперь в StrIn.Text невесь :)
как мне теперь быть люди
Сергей М. (2010-10-05 11:17:00) [8]
> Показал весь текст от начала до конца
Так звезды расположились)
> какого тогда типа мне нужна переменная что бы не через memo
> сделать?
TStringList
alekseyii (2010-10-05 11:11:00) [9]хех!!
сейчас
изменил
StrIn.Text:=form1.ClientSocket1.Socket.ReceiveText
где StrIn: TStringList;
на
form1.memo1.text:=form1.ClientSocket.Socket.ReceiveText
Показал весь текст от начала до конца
впринципе и ответ не большой
какого тогда типа мне нужна переменная что бы не через memo сделать?
Сергей М. (2010-10-05 11:03:00) [10]
> alekseyii © (05.10.10 10:29) [9]
Это ты гениально придумал - бесконечная рекурсия)
alekseyii (2010-10-05 10:29:00) [11]пробывал так, но программа вылетает при обрыве.
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 (2010-10-05 10:25:00) [12]DiamondShark
это как?
n:='';
s:=ClientSocket1.socket.ReceiveText;
while s<>'' do
begin
n:=n+s;
s:=ClientSocket.socket.receiveText;
end;
DiamondShark (2010-10-05 10:24:00) [13]
> alekseyii © (05.10.10 10:22) [4]
> продолжал работу - после переподключения инета продолжал
> получать данные черз get запрос и обрабатывать полученное
Надо запрос выполнять заново. ХТТП сервер после обрыва соединения забывает про неудачливого клиента напрочь.
alekseyii (2010-10-05 10:24:00) [14]я и коннектил заново при выполнении except, но результата нет
сейчас хочу на ClientSocket Остановиться, только ответ не полный приходит :-(
DiamondShark (2010-10-05 10:23:00) [15]
> alekseyii © (05.10.10 10:21) [2]
Ты напрасно думал, что весь ответ придёт одним куском.
Читай порциями в цикле.
alekseyii (2010-10-05 10:22:00) [16]продолжал работу - после переподключения инета продолжал получать данные черз get запрос и обрабатывать полученное
DiamondShark (2010-10-05 10:21:00) [17]
> но idHttp не продолжал сам работу при подключении.
А как он должен был продолжать? ХТТП так устроен, что если оборвалось, то всё, веники. Надо запрос повторять.
> Я решил сделать все на TClientSocket все хорошо но ответ
> от серверва приходит не полный, то есть содержимое txt файла
> приходит чуть больше половины а конца нет.
Значит, неправильно сделал. К сожалению, подробнее что-либо можно сказать только увидев, как оно сделано.
alekseyii (2010-10-05 10:21:00) [18]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;
Slym (2010-10-05 10:16:00) [19]alekseyii © (05.10.10 9:56)
продолжал сам работу
а ты его заставлял? показывай как делал