Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

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

 
Dyakon_Frost ©   (2006-07-13 14:47) [0]

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

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

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

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


 
S@shka ©   (2006-07-13 15:50) [1]

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


 
umbra ©   (2006-07-13 16:12) [2]

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


 
Dyakon_Frost ©   (2006-07-13 16:13) [3]

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

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

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

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


 
umbra ©   (2006-07-13 16:23) [4]

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


 
DVM ©   (2006-07-13 16:23) [5]


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

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


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

Поиск файлов в директории:
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);
 }


 
Dyakon_Frost ©   (2006-07-13 16:31) [7]


> DVM ©

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


 
umbra ©   (2006-07-13 16:39) [8]


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

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


 
Dyakon_Frost ©   (2006-07-13 16:48) [9]


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

В Memo


 
umbra ©   (2006-07-13 16:54) [10]


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

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


 
Dyakon_Frost ©   (2006-07-13 17:02) [11]


{
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 18:32) [12]

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


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


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

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


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

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


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

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

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

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


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

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


 
umbra ©   (2006-07-14 16:56) [17]


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

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


 
Dyakon_Frost ©   (2006-07-14 22:56) [18]

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.075 c
1-1161332146
zorik
2006-10-20 12:15
2006.12.03
Что за файл GqeDelph?


15-1163536037
Cerberus
2006-11-14 23:27
2006.12.03
Попинайте дизайн


15-1163079164
Access
2006-11-09 16:32
2006.12.03
Восстановить "опции" explore.exe в реестре


6-1152325749
Yuron
2006-07-08 06:29
2006.12.03
Как получить код страницы загуженной с помомщью TWebBrowser


1-1161192067
i-am-vladko
2006-10-18 21:21
2006.12.03
TWebBrowser dynamic create