Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Передача файла по сети (http://forum.oszone.net/showthread.php?t=228809)

Viton-Zizu 26-02-2012 12:41 1866860

Передача файла по сети
 
Ребят, подскажите как реализовать мою задачу...
Нужно с компов сети собирать Репорты(текстовые файлики) на мой комп. нащёд в инете отличный пример реалзации передачи файла с помощью TClientSocket и TServerSocket, но у меня консольное приложение, поэтому эти элементы немогу добавить на форму, так как формы собственно нет)) подскажите что можно сделать?)

Или может можно как то по друому эти репорты отправлять на мой комп? допустим складывать в расшареную папку у меня на компе?(правда нужно чтобы доступа небыло к этой папке...) ещё как вариант отправлять их на мыло, но его не хочу, хочется в пределах локальной сети всё сделать)

alex_03 27-02-2012 00:04 1867296

1. Пусть эти файлы будут shared на тех компьютерах где они лежат, тогда можно просто их копировать с помощью кода и уже работать у себя на компе.
2. Если share не хочется , то тогда используйте сокеты, но тут дилемма. Чтобы сокеты использовать надо 2 приложения - сервер и клиент. Сервер работает на стороне, где лежат файлы , а клиент работает у Вас на компьютеры. Сокеты можно использовать и в консольных приложениях.

El Scorpio 27-02-2012 05:07 1867386

Цитата:

Цитата Viton-Zizu
с помощью TClientSocket и TServerSocket, но у меня консольное приложение, поэтому эти элементы немогу добавить на форму »

Невизуальные компоненты добавлять на форму не обязательно. Можно создать их вручную - прописать указатели в классе главного объекта программы и создать в конструкторе командой new (с последующим удалением командой delete в деструкторе).
Только в этом случае те параметры, которые можно было править на форме, придётся прописывать в коде программы.

Viton-Zizu 27-02-2012 08:32 1867435

Цитата:

Цитата alex_03
1. Пусть эти файлы будут shared на тех компьютерах где они лежат, тогда можно просто их копировать с помощью кода и уже работать у себя на компе.
2. Если share не хочется , то тогда используйте сокеты, но тут дилемма. Чтобы сокеты использовать надо 2 приложения - сервер и клиент. Сервер работает на стороне, где лежат файлы , а клиент работает у Вас на компьютеры. Сокеты можно использовать и в консольных приложениях. »

Спасибо за коммент) Предложение отличное! но как тогда сделать чтобы к этой папке был доступ только у меня? собрать то это всё без проблем потом можно)
Цитата:

Цитата El Scorpio
Невизуальные компоненты добавлять на форму не обязательно. Можно создать их вручную - прописать указатели в классе главного объекта программы и создать в конструкторе командой new (с последующим удалением командой delete в деструкторе).
Только в этом случае те параметры, которые можно было править на форме, придётся прописывать в коде программы. »

Спасибо за ответ)
а есть какой нибудь пример как это делается? потому что всё таки придется делать скорей всего через сокеты, а как их в ручную прописывать ума не приложу...

alex_03 28-02-2012 12:02 1868276

Цитата:

Цитата Viton-Zizu
но как тогда сделать чтобы к этой папке был доступ только у меня? собрать то это всё без проблем потом можно) »

Я не могу дать точных рекомендаций по этому поводу, так как не знаю некоторых вещей :
1. что за операционные у клиентов
2. какие учетные записи у этих клиентов
3. в конце - концов есть ли домен

вообщем рулить надо через права доступа к папке или к файлу , это не сложно. Хотя если запретить им доступ или ограничить , скажем на запись, то тут возникает один нюанс. Ведь файлики создаются и дополняются "чем-то", скорее всего какой-то софтинкой клиентской, то ограничив доступ к файлу, они не смогу писать в эти файлы так что такой вариант, не катит
К примеру icq-логи. Есть такая фишка на предприятии , когда "дыректор-пуп-земли" хочет знать а не пишут ли там чего то про него сотрудники в icq , а так как эта программа оставляет логи , если ее не настроить должным образом или не удалять логи самому , то можно написать софт который будет логи собирать и предоставлять для анализа.

Задачу более подробно опишите может чем помочь смогу более этого.

Viton-Zizu 28-02-2012 16:41 1868467

Цитата:

Цитата alex_03
Я не могу дать точных рекомендаций по этому поводу, так как не знаю некоторых вещей :
1. что за операционные у клиентов
2. какие учетные записи у этих клиентов
3. в конце - концов есть ли домен
вообщем рулить надо через права доступа к папке или к файлу , это не сложно. Хотя если запретить им доступ или ограничить , скажем на запись, то тут возникает один нюанс. Ведь файлики создаются и дополняются "чем-то", скорее всего какой-то софтинкой клиентской, то ограничив доступ к файлу, они не смогу писать в эти файлы так что такой вариант, не катит
К примеру icq-логи. Есть такая фишка на предприятии , когда "дыректор-пуп-земли" хочет знать а не пишут ли там чего то про него сотрудники в icq , а так как эта программа оставляет логи , если ее не настроить должным образом или не удалять логи самому , то можно написать софт который будет логи собирать и предоставлять для анализа.
Задачу более подробно опишите может чем помочь смогу более этого. »

1) операционки в основном 7, хотя попадаются ХР.
2) учётки с правами пользователя
3)Рабочая группа
Моя програмка(на С++ писал) создаёт текстовый отчёт, вот хотел её ещё дописать чтобы она этот отчёт мне скидывала, но с сокетами не хочу пока связываться, так как прога без формы) вот мне бы эти репорты собрать, но как? если просто расшарить, то любой в сети сможет этот репорт в итоге качнуть...
кстати тут ситуация немного похожа, про директора))
вот думаю... а может на фтп скидывать? надо глянуть, тяжело ли это на сях реализовать) хотя этот вариант тоже не фонтан)

alex_03 28-02-2012 20:03 1868651

Пусть программа будет не у Вас на компьютере а у людей , в реестре пропишите чтобы она стартовала вместе с операционной системой и работала все время как работает пользователь. На Вашем компьютере расшарте папку для записи от Вашей программы.

В коде я бы прописал так , сначала мы проверяем есть ли доступ к Вашему компьютеру , скажем есть, мы берем и побитно
копируем файл в папку. И так будет на всех компьютерах эта программка копировать. А потом скажем программка "засыпает". То есть на какой-то промежуток времени основной поток программы Sleep() или можно это организовать через Timer. Timer вызывает в определенный промежутки времени процедуру копирования CopyFileToMe() и потом снова засыпает. Timer настройте на 1 час или на 30 минут.

Если у Вас на компьютере стоит Professional XP/Vista/Win7 то можно создать папку на нее поставить разрешения только для администратора, на чтение и запись ( раздел безопасность в свойствах папки ) . Если такого раздела нет то надо убрать галочку в "Сервис" - "Свойства папки" - "Вид" - "Использовать простой общий доступ к файлам " ( это в XP ) в Viste и Win7 надо рулить в панели управления, там искать "Свойства папки".

И когда мы будет писать в эту папку , на в нее писать от имени администратора предоставляя логин и пароль. Реально круто получиться. Как это сделать , в коде я точно не знаю , можно посмотреть. Как идея ?

alex_03 28-02-2012 20:41 1868681

кстати пишите на чем-то более "высокоуровневом" , нежели голый с++ , скажем форму легко можно скрыть указав в свойствах ее невидимость MyForm.Visible = false при загрузке приложения . Так как задача прикладная , я бы рекомендовал Delphi, C++ Builder, Visual Basic , C# .... чистый win api не рекомендую - времени больше уйдет.

Viton-Zizu 29-02-2012 17:02 1869321

идея то хороша, вот только думаю проблемно мне будет её реализовать)) думаю проще уже форму невидимую сделать и реализовать сокетами))
пишу на С++Builder, просто приложение консольное)

alex_03 29-02-2012 17:17 1869327

там ничего сложного, абсолютно ничего. Задача решается за день-два "медленного" программирования. С сокетами сложнее , так как надо будет согласовывать работу двух сокетов - серверного и клиентского.

El Scorpio 01-03-2012 01:33 1869712

Цитата:

Цитата Viton-Zizu
а есть какой нибудь пример как это делается? потому что всё таки придется делать скорей всего через сокеты, а как их в ручную прописывать ума не приложу... »

Делается это примерно так
Код:


// Главный объект программы
TMainObject
{
private:
TServerSocket *fServerSocket;
//// прочие закрытые поля класса и методы


public:
__property TServerSocket *ServerSocket = {read=fServerSocket};
__fastcall TMainObject (void);
__fastcall ~TMainObject (void);
//// прочие открытые свойства класса и методы
};

// Конструктор класса
__fastcall TMainObject::TMainObject (void)
{
fServerSocket = new TServerSocket::TServerSocket (null);
fServerSocket->... = //// задать параметры объекта
}

// Деструктор класса
__fastcall TMainObject::~TMainObject (void)
{
delete fServerSocket;
}

// Основной код программы
int main ()
{
TMainObject MainObject; // Создаётся статический объект, содержащий в том числе нужные невизуальные компоненты
MainObject.ServerSocket->... Использование свойств и методов компонента
}
// Объект MainObject будет автоматически уничтожен при завершении функции main



Время: 03:04.

Время: 03:04.
© OSzone.net 2001-