Загрузка...

Пишу софт и нужны пара советов

Тема в разделе C# создана пользователем CLS 19 дек 2023. 364 просмотра

  1. CLS
    CLS Автор темы 19 дек 2023 За авторегами в тг t.me/siporachchemba
    Есть некое ПО которое должно допустим раз в 5 минут стучатся к компам в локальной сети и перемещать все файлы из определенной папки в "Родительский" ПК где этот софт запущен, как лучше это сделать?
     
  2. ChatGPT
    ChatGPT 19 дек 2023 2250 14 мар 2023
    CLS

    Для реализации данной задачи вам понадобится использовать сетевое взаимодействие между компьютерами в локальной сети и операции с файлами.

    Вот примерный алгоритм решения:

    1. На "Родительском" компьютере запустите сервер, который будет принимать запросы от других компьютеров и принимать файлы.
    2. На каждом компьютере в локальной сети запустите клиентскую программу, которая будет стучаться к серверу каждые 5 минут.
    3. Клиентская программа должна сканировать определенную папку на компьютере и отправлять файлы на сервер.
    4. Сервер должен принимать файлы от клиентов и сохранять их в "Родительскую" папку.

    Для реализации сетевого взаимодействия вы можете использовать сокеты или HTTP протокол. Для операций с файлами вам понадобятся функции для сканирования папки и перемещения файлов.

    Вот примерный код на C# для сервера:

    CSHARP

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;

    class Server
    {
    static void Main()
    {
    // Установка IP-адреса и порта сервера
    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    int port = 12345;

    // Создание TCP Listener
    TcpListener listener = new TcpListener(ipAddress, port);
    listener.Start();

    Console.WriteLine("Сервер запущен. Ожидание подключений...");

    while (true)
    {
    // Принятие клиентского подключения
    TcpClient client = listener.AcceptTcpClient();
    Console.WriteLine("Подключение от клиента: " + ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());

    // Получение потока для чтения данных от клиента
    NetworkStream stream = client.GetStream();

    // Получение имени файла от клиента
    byte[] fileNameBytes = new byte[1024];
    int bytesRead = stream.Read(fileNameBytes, 0, fileNameBytes.Length);
    string fileName = Encoding.ASCII.GetString(fileNameBytes, 0, bytesRead);

    // Получение данных файла от клиента
    byte[] fileData = new byte[1024];
    using (MemoryStream ms = new MemoryStream())
    {
    int bytesReceived;
    while ((bytesReceived = stream.Read(fileData, 0, fileData.Length)) > 0)
    {
    ms.Write(fileData, 0, bytesReceived);
    }

    // Сохранение файла в "Родительскую" папку
    string parentFolder = @"C:\ParentFolder";
    string filePath = Path.Combine(parentFolder, fileName);
    File.WriteAllBytes(filePath, ms.ToArray());
    }

    // Закрытие подключения
    client.Close();
    }
    }
    }
    Вот примерный код на C# для клиента:

    CSHARP

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;

    class Client
    {
    static void Main()
    {
    // Установка IP-адреса и порта сервера
    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    int port = 12345;

    while (true)
    {
    try
    {
    // Создание TCP клиента
    TcpClient client = new TcpClient();

    // Подключение к серверу
    client.Connect(ipAddress, port);
    Console.WriteLine("Подключение к серверу успешно.");

    // Получение папки для сканирования
    string folderPath = @"C:\FolderToScan";

    // Сканирование папки и отправка файлов на сервер
    foreach (string filePath in Directory.GetFiles(folderPath))
    {
    string fileName = Path.GetFileName(filePath);

    // Отправка имени файла на сервер
    NetworkStream stream = client.GetStream();
    byte[] fileNameBytes = Encoding.ASCII.GetBytes(fileName);
    stream.Write(fileNameBytes, 0, fileNameBytes.Length);

    // Отправка данных файла на сервер
    byte[] fileData = File.ReadAllBytes(filePath);
    stream.Write(fileData, 0, fileData.Length);
    }

    // Закрытие подключения
    client.Close();
    }
    catch (Exception ex)
    {
    Console.WriteLine("Ошибка: " + ex.Message);
    }

    // Ожидание 5 минут перед следующей отправкой
    Thread.Sleep(5 * 60 * 1000);
    }
    }
    }
    Обратите внимание, что это только примерный код, и вам может потребоваться внести изменения в зависимости от ваших требований и окружения. Также не забудьте добавить обработку исключений и проверки наличия папок и файлов.

    Надеюсь, это поможет вам начать реализацию вашего ПО. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
     
    1. CLS Автор темы
      ChatGPT, можно как то обойтись без клиентского кода?
    2. ChatGPT
      CLS

      Если вы хотите обойтись без клиентского кода на каждом компьютере в локальной сети, то можно использовать другой подход.

      Вы можете настроить "Родительский" компьютер как сетевой файловый сервер, например, с помощью протокола SMB (Server Message Block). Затем на каждом компьютере в локальной сети настроить автоматическое копирование файлов из определенной папки на "Дочерних" компьютерах на сетевой файловый сервер.

      Вот примерный алгоритм решения:

      1. На "Родительском" компьютере настройте сетевой файловый сервер, например, с помощью протокола SMB.
      2. На каждом "Дочернем" компьютере настройте автоматическое копирование файлов из определенной папки на сетевой файловый сервер.
      3. Установите расписание для автоматического копирования файлов каждые 5 минут.

      Вот примерный код на C# для копирования файлов на "Дочернем" компьютере:

      CSHARP

      using System;
      using System.IO;

      class Program
      {
      static void Main()
      {
      string sourceFolder = @"C:\FolderToCopy";
      string destinationFolder = @"\\ParentComputer\SharedFolder";

      try
      {
      // Копирование файлов из исходной папки в папку назначения
      foreach (string filePath in Directory.GetFiles(sourceFolder))
      {
      string fileName = Path.GetFileName(filePath);
      string destinationPath = Path.Combine(destinationFolder, fileName);
      File.Copy(filePath, destinationPath, true);
      }

      Console.WriteLine("Файлы успешно скопированы.");
      }
      catch (Exception ex)
      {
      Console.WriteLine("Ошибка: " + ex.Message);
      }
      }
      }
      В этом примере мы используем метод `File.Copy` для копирования файлов из исходной папки в папку назначения на сетевом файловом сервере. Установите эту программу на каждом "Дочернем" компьютере и настройте расписание для ее запуска каждые 5 минут.

      Обратите внимание, что для использования сетевого файлового сервера вам может потребоваться настроить соответствующие разрешения доступа и настройки безопасности.

      Надеюсь, это поможет вам реализовать вашу задачу без клиентского кода на каждом компьютере. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
    3. CLS Автор темы
      ChatGPT, Могу ли я с помощью метода File.Move() переместить файлы из удаленного компьютера на локальный
    4. Посмотреть следующие комментарии (1)
  3. Арбузим
    Арбузим 19 дек 2023 Моментальная покупка TRX - https://lolz.live/threads/8610296/ 1546 22 авг 2022
    Попробуй сделать лог лист что бы видеть когда и какой файл отправился на "родительский" комп
     
    1. Посмотреть предыдущие комментарии (1)
    2. Арбузим
      CLS, ну можно сделать что бы он отправлял их на файлообменник и ты получал ссылку на него в телеграмм например
    3. CLS Автор темы
      Арбузим, уффф, жестко братан) Я думал что то с FTP придумать. Но это мне не подходит так как условно я не могу на клиентах ничего менять
      19 дек 2023 Изменено
    4. Арбузим
      CLS, Можно открыть сокет на "Родительском" ПК, к которому будут подключаться остальные пк.
      И на этот сервер они будут раз 5 минут отправлять файлы
  4. Dead__Artis
    Dead__Artis 28 дек 2023 921 30 май 2020
    если тебе нужно шариться по другим компам и перемещять в них файлы, если на них открыт smb, то юзай либу для smb думаю без меня найдешь
     
  5. D1STR1CT
    D1STR1CT 17 фев 2024 2 30 мар 2021
    Есть вариант сделать PubSub на указанную папку и делать что нужно через ивенты.

    CSHARP
    using System;
    using System.IO;

    public class FolderWatcher
    {
    private FileSystemWatcher watcher;

    // Ивенты на каждое событие в папке
    public event EventHandler<string> FileCreated;
    public event EventHandler<string> FileDeleted;
    public event EventHandler<string> FileModified;
    public event EventHandler<string> FileRenamed;

    public FolderWatcher(string folderPath)
    {
    watcher = new FileSystemWatcher();
    watcher.Path = folderPath;
    watcher.EnableRaisingEvents = true;

    watcher.Created += (sender, e) => FileCreated?.Invoke(this, e.FullPath);
    watcher.Deleted += (sender, e) => FileDeleted?.Invoke(this, e.FullPath);
    watcher.Changed += (sender, e) => FileModified?.Invoke(this, e.FullPath);
    watcher.Renamed += (sender, e) => FileRenamed?.Invoke(this, e.FullPath);
    }
    }

    // Example usage:
    class Program
    {
    static void Main(string[] args)
    {
    //Путь к папке
    string folderPath = @"C:\Folder";
    var folderWatcher = new FolderWatcher(folderPath);

    //Добавление функционала (лямбда-выражения)
    folderWatcher.FileCreated += (sender, filePath) => Console.WriteLine($"Файл создан: {filePath}");
    folderWatcher.FileDeleted += (sender, filePath) => Console.WriteLine($"Файл удален: {filePath}");
    folderWatcher.FileModified += (sender, filePath) => Console.WriteLine($"Файл изменен: {filePath}");
    folderWatcher.FileRenamed += (sender, filePath) => Console.WriteLine($"Файл переименован: {filePath}");

    Console.WriteLine("Ожидание изменений...");
    Console.ReadLine();
    }
    }
     
    1. Dead__Artis
      D1STR1CT, ха только сегодня юзал для создания кода файлового менеджера
Загрузка...
Top