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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2012, 21:37   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Получить полный ответ от Socket

От сервера приходит очень длинный ответ, который разбит на части. Собственно, как произвести получение всего содержимого?
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket.Socket.SendText('status');
end;
...
procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s, temps: string;
begin
  s := Socket.ReceiveText;

  // Опрашиваем сервер с целью получения полного ответа, если таковое требуется
  while not (Pos('/query/', s) <> 0) do
  begin
    ClientSocket.Socket.SendText('status');
    temps := Socket.ReceiveText;
    s := s + temps;
  end;
end;
Данный способ не работает. Такая реализация работает только на UDP.

Помогите пожалуйста.
Shouldercannon вне форума Ответить с цитированием
Старый 09.03.2012, 22:15   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а зачем вы снова посылаете запрос?
прочтите сначало ответ прежде чем чтото снова слать.

и читать надо в глобальную переменную поидее, так как событие вызывается столько раз сколько порций приходит.(поидее так)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.03.2012, 23:00   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Точно
Код:
procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s: string;
begin
  s := Socket.ReceiveText;
  Writing(s);
end;

procedure TForm1.Writing(Text: string);
var
  txt: string;
  SL: TStringList;
begin
  txt := txt + Text;

  if Pos('status', txt) <> 0 then
  begin
    SL := TStringList.Create;
    SL.Add(txt);
    SL.SaveToFile('data.txt');
    SL.Free;
  end;
end;
Shouldercannon вне форума Ответить с цитированием
Старый 09.03.2012, 23:05   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
txt := txt + Text;
ну глобальной она от этого не стала.
и итого у вас по сути txt:=Text.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправить и получить ответ Andrey85 Работа с сетью в Delphi 1 03.01.2011 02:58
Получить ответ сервера TWebBrowser. .while Работа с сетью в Delphi 2 13.07.2010 20:51
Приходит не полный ответ Shouldercannon Общие вопросы Delphi 3 12.03.2010 21:45
Из процесса получить полный путь к ехе файлу. Ozerich Общие вопросы Delphi 4 08.08.2008 12:12
Отправить AT команду модему и получить ответ Никки Общие вопросы Delphi 3 24.06.2008 17:15