Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.045 c
2-1163406326
Panaev
2006-11-13 11:25
2006.12.03
Подключение БД из сети


15-1163587152
Rentgen
2006-11-15 13:39
2006.12.03
процедуры с перечислением одних и тех же типов переменных


4-1153208832
anton1209
2006-07-18 11:47
2006.12.03
Flow control в BCD


6-1153152312
cando
2006-07-17 20:05
2006.12.03
слежка за портом


2-1163857257
alexey_mas
2006-11-18 16:40
2006.12.03
ADO





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский