Форум: "Сети";
Текущий архив: 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.04 c