Здравствуйте!
Пишу клиент и сервер на C++ Builder 6 используя ClientSocket и ServerSocket.
Мне необходимо получить данные от сервера о файлах находящихся в заданной директории!
В клиенте они выводятся в Memo.
Есть проблема: когда вывожу данные, то они не всегда выводятся построчно, бывает так, что все названия файлов находятся в одной строке!
Как избежать этой проблемы?
Код клиента (вывод в Memo):
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString buff;
buff = Socket->ReceiveText();
//-------------вывод-----------------//
Memo1->Lines->Add(buff);
}
Код сервера (поиск файлов):
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, Вы писали:
D_F>Здравствуйте!
D_F>Пишу клиент и сервер на C++ Builder 6 используя ClientSocket и ServerSocket.
D_F>Мне необходимо получить данные от сервера о файлах находящихся в заданной директории!
D_F>В клиенте они выводятся в Memo.
D_F>Есть проблема: когда вывожу данные, то они не всегда выводятся построчно, бывает так, что все названия файлов находятся в одной строке!
D_F>Как избежать этой проблемы?
D_F>Код клиента (вывод в Memo):
D_F>D_F>void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
D_F> TCustomWinSocket *Socket)
D_F>{
D_F> AnsiString buff;
D_F> buff = Socket->ReceiveText();
D_F> //-------------вывод-----------------//
D_F> Memo1->Lines->Add(buff);
D_F>}
D_F>
или Memo1->Lines->Text = Memo1->Lines->Text + buff;
и читай ниже
D_F>Код сервера (поиск файлов):
D_F>D_F> if (FindFirst(Cur_cat + "*.*", faAnyFile, sr) == 0)
D_F> {
D_F> do
D_F> {
D_F> if ((sr.Attr & faDirectory) != faDirectory)
D_F> {
D_F> ServerSocket1->Socket->Connections[0]->SendText(sr.Name);
D_F> }
D_F> } while (FindNext(sr) == 0);
D_F> FindClose(sr);
D_F> }
D_F>
Не делай SendText в цыкле, сначала собери все имена в одну строку, именя разделяй "ЕНТЕРОМ",
потом посылай.
D_F>Думаю что надо при получении данных в клиенте, записать их в буфер, а потом его обрабатывать!
D_F>Но не знаю за что зацепиться.
D_F>Заранее спасибо!... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Большое спасибо!
Все получилось. Странно, что это сразу не пришло в голову!
Здравствуйте, Dyakon_Frost, Вы писали:
D_F>Большое спасибо!
D_F>Все получилось. Странно, что это сразу не пришло в голову!
Удачи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>