![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка полученных данных от сервера!
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]А в каком виде то ты ее передаешь?