Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2011, 16:14   #1
Kingcss
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 13
По умолчанию Передача массива через сокеты

Вообщем задача: передать названия файлов и папок в нужной мне директории с одного компа и вывести это дело в ListView на другом.
Делаю так:
на обоих компах:
PHP код:
type
FM
packed record
name
:string;
size:integer;
folder:boolean;
end
на сервере(который отправляет):
PHP код:
var
fail:array[0..50of FM;

procedure TForm1.SendFileList(path:string);
var
srTSearchRec;
p:integer;
begin
p
:=0;{Собираю названия папок и файлов в в массив fail
 
if FindFirst(path+'*.*'faAnyFilesr) = 0 then
  begin
  repeat
   fail
[p].name:=SR.Name;
   if (
SR.Attr faDirectorythen
   fail
[p].folder:=true;
   
Inc(p);
  
until FindNext(sr) <> 0;
  
FindClose(sr);
 
end;
//FsSs.Socket.Connections[0].SendText(inttostr(p-1)+'#');{Отправляю количество файлов и папок в директории, пишет что 24, хотя в реале их 20, включая скрытые файлы}
FsSs.Socket.Connections[0].SendBuf(fail,sizeof(fail));{Отправляю массив}
end
Далее код клиента:
PHP код:
procedure TForm3.FsCsRead(SenderTObjectSocketTCustomWinSocket);
var
FileSystem: array[0..50of FM;
ListItemTListItem;
KolElem:integer;
i:integer;
s:string;
size:integer;
begin
s
:=Socket.ReceiveText;
KolElem:=strtoint(copy(s,0,pos('#',s)-1)); {принимаю количество элементов}
size:=Socket.ReceiveLength;
Socket.ReceiveBuf(FileSystem,size);
for 
i:=0 to KolElem-do begin{заношу данные в ListView}
ListItem:=ListView1.Items.Add;
ListItem.Caption:=FileSystem[i].name;
ListItem.SubItems.Add(inttostr(FileSystem[i].size));
if 
FileSystem[i].folder true then ListItem.SubItems.Add('Папка')
else 
ListItem.SubItems.Add(' ');
end;
end
Ничего не передается, только в листвиев добавляется размер, который он непонятно откуда берет, т.к. я его не забивал, там должно быть нулевое значение.
Подскажите где ошибка и как исправить.
Kingcss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не отправляет файл через сокеты Nerig C++ Builder 0 19.05.2011 16:38
Передача файлов через сокеты Joker_vad Работа с сетью в Delphi 1 03.12.2010 12:09
Расшифровать код (передача ФАЛОВ через сокеты) хомякec Помощь студентам 1 18.05.2010 15:54
Передача данных(массива) через DLL. acorables Общие вопросы Delphi 4 05.02.2007 13:16