Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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)
продолжал сам работу

а ты его заставлял? показывай как делал


Наверх

Титульная страница Поиск, карта сайта Написать письмо