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

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

Обработка полученных данных от сервера!


Dyakon_Frost ©   (2006-07-13 14:47:00) 

Здравствуйте!

Написал клиента, который получает информацию от сервера, а именно - список файлов в заданной директории! Так вот, проблема в том что при получении данных, когда я вывожу информацию в Memo она может выводится, то в одну строку то по порядку! Подскажите как можно правильно обработать полученную информацию, чтобы название каждого файла выводилось построчно в Memo?

Использую TCPClient, TCPServer.
Если что-то не уточнил, пишите!

Заранее спасибо!


Dyakon_Frost   (2006-07-14 22:56:00) [1]

Большое спасибо!

Для справки: мне предложили еще один способ!
На сервере, сразу не отправлять клиенту данные, а вначале записать их в переменную + символ Enter и потом уже передавать клиенту информацию из переменной.
Все получилось.
Хотя сейчас еще сделаю через Indy!


umbra   (2006-07-14 16:56:00) [2]


> Может сразу кто подскажет, как в IdTCPClient - получить
> данные от сервера?
> Точнее на какое событие его писать?

ни на какое. Есть метод TIdTCPClient.ConnectAndGetAll. Передаете в него параметром стринглист и в него добавятся все строки, полученные от сервера.


Dyakon_Frost   (2006-07-14 16:21:00) [3]

Может сразу кто подскажет, как в IdTCPClient - получить данные от сервера?
Точнее на какое событие его писать?


Dyakon_Frost   (2006-07-14 15:56:00) [4]

Всем большое спасибо!
Придумал другой способ: просто придется копировать каждое название в массив, а от туда выводить!
Хотя проще пропробовать использовать TIdTcpServer и TIdTcpClient.

Попробую и то и то! ))

Еще раз спасибо!


XbI   (2006-07-14 09:18:00) [5]

использовать TIdTcpServer и TIdTcpClient, была такая же проблема решилась с помощью этих компонентов...


medved_68   (2006-07-13 18:35:00) [6]


> buff[i] = ''; (сдесь пытался использовать '\n', VK_RETURN)

А если просто попытаться тупо поставить #0d,или $0d как там шестнадцетиричное значение кодируется в Билдере???? И плюс еще 0а.


umbra   (2006-07-13 18:32:00) [7]

если Вы черезсокет отсылаете по очереди имена файлов, то, по идее, они должны приходить неизмененными. Попробуйте отсылать имя файла + #13#10 (или как там в С обозначаются отдельные символы). После этого на клиенте вообще, в идеальном случае ничего, кроме чтения из сокета и добавления строк в мемо делать не надо.


Dyakon_Frost   (2006-07-13 17:02:00) [8]


{
AnsiString buff;
buff = Socket->ReceiveText();

for (int i = 1; i < buff.Length(); i++)
 {
  if (buff[i] == '*')
  {
   buff[i] = ''; (сдесь пытался использовать '\n', VK_RETURN)
  }
 }
Memo1->Lines->Add(buff);
}


umbra   (2006-07-13 16:54:00) [9]


> пытаюсь заменить символы на знак Enter

а как Вы пытаетесь?


Dyakon_Frost   (2006-07-13 16:48:00) [10]


> а где это видно?

В Memo


umbra   (2006-07-13 16:39:00) [11]


> И почему то у меня когда пытаюсь заменить символы на знак
> Enter, они просто заменяются на "|"

а где это видно?


Dyakon_Frost   (2006-07-13 16:31:00) [12]


> DVM ©

Как я уже говорил, к сожалению прога написана на Билдере!
И почему то у меня когда пытаюсь заменить символы на знак Enter, они просто заменяются на "|"; ((


Dyakon_Frost   (2006-07-13 16:25:00) [13]

Поиск файлов в директории:
if (FindFirst(Cur_cat + "*.*", faAnyFile, sr) == 0)
 {
  do
   {
    if ((sr.Attr & faDirectory) != faDirectory)
     {
      ServerSocket1->Socket->Connections[0]->SendText(sr.Name);
     }
   } while (FindNext(sr) == 0);
   FindClose(sr);
 }


DVM   (2006-07-13 16:23:00) [14]


> код Enter, но что-то не получается!

textforsend := filename + #13#10 + filename + #13#10;


umbra   (2006-07-13 16:23:00) [15]

лучше приведите код, который ищет и исправляет концы строк. Как мне кажется,  дело именно в нем.


Dyakon_Frost   (2006-07-13 16:13:00) [16]

Просто проблема в том что я ее на C++ Builder пишу и привести код на Delphi немогу, но суть одна!
А передаю в потоке как текст - AnsiString (String);
А когда получаю, то вначале загоняю в переменную и пытаюсь уже ее обработать как строку!

Вначале подумал, что можно на сервере после каждого названия файла, записать какой-нибуть знак, например "*", а в клиенте обрабатывая полученный поток загнанный в строку - заменить каждый встречающийся знак "*" (так как в имени файла он не употребляется) на код Enter, но что-то не получается!

Для наглядности код:
Server:
ServerSocket1->Socket->Connections[0]->SendText(sr.Name);
Client:
ClientSocket1->Socket->SendText(str);

Заранее прошу не пинать, что в форум о Делфи пишу! )))


umbra   (2006-07-13 16:12:00) [17]

надо сделать так, чтобы в полученных данных до их вставки в мемо перед каждым символом с кодом 10 (LF) стоял символ с кодом 13 (CR)


S@shka   (2006-07-13 15:50:00) [18]

А в каком виде то ты ее передаешь?


Наверх

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