Просмотр всех файлов на удаленном ПК, используя технологию Клиент-сервер - C#

Узнай цену своей работы

Формулировка задачи:

Добра. Пишу клиент-серверное приложение. Нужно сделать так, чтобы визуально на сервере было видно все (ну или не совсем) файлы на ПК клиента. Хотелось бы реализовать интерфейс, что-то типо файлзиллы или тоталкомандера (похожий приложил на скрине). То есть, слева файлы на сервере, справа на клиенте. Хочу узнать, как лучше реализовать обмен файлами и вообще возможность их отображения. Сервер и клиент на обычных сокетах. Клиент консольный, сервер винформс. Подскажите, как это лучше сделать. Не сканировать же все файлы на пк клиента. Это долго. Спасибо

Решение задачи: «Просмотр всех файлов на удаленном ПК, используя технологию Клиент-сервер»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Net;
  5.  
  6. namespace FtpClient
  7. {
  8.     public class Client {
  9.         private string password;
  10.         private string userName;
  11.         private string uri;
  12.         private int bufferSize = 1024;
  13.  
  14.         public bool Passive = true;
  15.         public bool Binary = true;
  16.         public bool EnableSsl = false;
  17.         public bool Hash = false;
  18.        
  19.         public Client(string uri, string userName, string password) {
  20.             this.uri = uri;
  21.             this.userName = userName;
  22.             this.password = password;
  23.         }
  24.  
  25.         public string ChangeWorkingDirectory(string path) {
  26.             uri = combine(uri, path);
  27.  
  28.             return PrintWorkingDirectory();
  29.         }
  30.  
  31.         public string DeleteFile(string fileName) {
  32.             var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.DeleteFile);
  33.            
  34.             return getStatusDescription(request);
  35.         }
  36.  
  37.         public string DownloadFile(string source, string dest) {
  38.             var request = createRequest(combine(uri, source), WebRequestMethods.Ftp.DownloadFile);
  39.            
  40.             byte[] buffer = new byte[bufferSize];
  41.  
  42.             using (var response = (FtpWebResponse)request.GetResponse()) {
  43.                 using (var stream = response.GetResponseStream()) {
  44.                     using (var fs = new FileStream(dest, FileMode.OpenOrCreate)) {
  45.                         int readCount = stream.Read(buffer, 0, bufferSize);
  46.  
  47.                         while (readCount > 0) {
  48.                             if (Hash)
  49.                                 Console.Write("#");
  50.  
  51.                             fs.Write(buffer, 0, readCount);
  52.                             readCount = stream.Read(buffer, 0, bufferSize);
  53.                         }
  54.                     }
  55.                 }
  56.  
  57.                 return response.StatusDescription;
  58.             }
  59.         }
  60.  
  61.         public DateTime GetDateTimestamp(string fileName) {
  62.             var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.GetDateTimestamp);
  63.            
  64.             using (var response = (FtpWebResponse)request.GetResponse()) {
  65.                 return response.LastModified;
  66.             }
  67.         }
  68.  
  69.         public long GetFileSize(string fileName) {
  70.             var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.GetFileSize);
  71.            
  72.             using (var response = (FtpWebResponse)request.GetResponse()) {
  73.                 return response.ContentLength;
  74.             }
  75.         }
  76.  
  77.         public string[] ListDirectory() {
  78.             var list = new List<string>();
  79.  
  80.             var request = createRequest(WebRequestMethods.Ftp.ListDirectory);
  81.            
  82.             using (var response = (FtpWebResponse)request.GetResponse()) {
  83.                 using (var stream = response.GetResponseStream()) {
  84.                     using (var reader = new StreamReader(stream, true)) {
  85.                         while (!reader.EndOfStream) {
  86.                             list.Add(reader.ReadLine());
  87.                         }
  88.                     }
  89.                 }
  90.             }
  91.  
  92.             return list.ToArray();
  93.         }
  94.  
  95.         public string[] ListDirectoryDetails() {
  96.             var list = new List<string>();
  97.  
  98.             var request = createRequest(WebRequestMethods.Ftp.ListDirectoryDetails);
  99.            
  100.             using (var response = (FtpWebResponse)request.GetResponse()) {
  101.                 using (var stream = response.GetResponseStream()) {
  102.                     using (var reader = new StreamReader(stream, true)) {
  103.                         while (!reader.EndOfStream) {
  104.                             list.Add(reader.ReadLine());
  105.                         }
  106.                     }
  107.                 }
  108.             }
  109.  
  110.             return list.ToArray();
  111.         }
  112.  
  113.         public string MakeDirectory(string directoryName) {
  114.             var request = createRequest(combine(uri, directoryName), WebRequestMethods.Ftp.MakeDirectory);
  115.            
  116.             return getStatusDescription(request);
  117.         }
  118.  
  119.         public string PrintWorkingDirectory() {
  120.             var request = createRequest(WebRequestMethods.Ftp.PrintWorkingDirectory);
  121.  
  122.             return getStatusDescription(request);
  123.         }
  124.  
  125.         public string RemoveDirectory(string directoryName) {
  126.             var request = createRequest(combine(uri, directoryName), WebRequestMethods.Ftp.RemoveDirectory);
  127.            
  128.             return getStatusDescription(request);
  129.         }
  130.  
  131.         public string Rename(string currentName, string newName) {
  132.             var request = createRequest(combine(uri, currentName), WebRequestMethods.Ftp.Rename);
  133.            
  134.             request.RenameTo = newName;
  135.  
  136.             return getStatusDescription(request);
  137.         }
  138.  
  139.         public string UploadFile(string source, string destination) {
  140.             var request = createRequest(combine(uri, destination), WebRequestMethods.Ftp.UploadFile);
  141.            
  142.             using (var stream = request.GetRequestStream()) {
  143.                 using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
  144.                     int num;
  145.  
  146.                     byte[] buffer = new byte[bufferSize];
  147.  
  148.                     while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
  149.                         if (Hash)
  150.                             Console.Write("#");
  151.  
  152.                         stream.Write(buffer, 0, num);
  153.                     }
  154.                 }
  155.             }
  156.  
  157.             return getStatusDescription(request);
  158.         }
  159.  
  160.         public string UploadFileWithUniqueName(string source) {
  161.             var request = createRequest(WebRequestMethods.Ftp.UploadFileWithUniqueName);
  162.            
  163.             using (var stream = request.GetRequestStream()) {
  164.                 using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
  165.                     int num;
  166.  
  167.                     byte[] buffer = new byte[bufferSize];
  168.  
  169.                     while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
  170.                         if (Hash)
  171.                             Console.Write("#");
  172.  
  173.                         stream.Write(buffer, 0, num);
  174.                     }
  175.                 }
  176.             }
  177.  
  178.             using (var response = (FtpWebResponse)request.GetResponse()) {
  179.                 return Path.GetFileName(response.ResponseUri.ToString());
  180.             }
  181.         }
  182.  
  183.         private FtpWebRequest createRequest(string method) {
  184.             return createRequest(uri, method);
  185.         }
  186.  
  187.         private FtpWebRequest createRequest(string uri, string method) {
  188.             var r = (FtpWebRequest)WebRequest.Create(uri);
  189.  
  190.             r.Credentials = new NetworkCredential(userName, password);
  191.             r.Method = method;
  192.             r.UseBinary = Binary;
  193.             r.EnableSsl = EnableSsl;
  194.             r.UsePassive = Passive;
  195.  
  196.             return r;
  197.         }
  198.  
  199.         private string getStatusDescription(FtpWebRequest request) {
  200.             using (var response = (FtpWebResponse)request.GetResponse()) {
  201.                 return response.StatusDescription;
  202.             }
  203.         }
  204.  
  205.         private string combine(string path1, string path2) {
  206.             return Path.Combine(path1, path2).Replace("\\", "/");
  207.         }
  208.     }
  209. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы