Просмотр всех файлов на удаленном ПК, используя технологию Клиент-сервер - C#
Формулировка задачи:
Добра.
Пишу клиент-серверное приложение.
Нужно сделать так, чтобы визуально на сервере было видно все (ну или не совсем) файлы на ПК клиента.
Хотелось бы реализовать интерфейс, что-то типо файлзиллы или тоталкомандера (похожий приложил на скрине).
То есть, слева файлы на сервере, справа на клиенте.
Хочу узнать, как лучше реализовать обмен файлами и вообще возможность их отображения.
Сервер и клиент на обычных сокетах. Клиент консольный, сервер винформс.
Подскажите, как это лучше сделать. Не сканировать же все файлы на пк клиента. Это долго.
Спасибо
Решение задачи: «Просмотр всех файлов на удаленном ПК, используя технологию Клиент-сервер»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- namespace FtpClient
- {
- public class Client {
- private string password;
- private string userName;
- private string uri;
- private int bufferSize = 1024;
- public bool Passive = true;
- public bool Binary = true;
- public bool EnableSsl = false;
- public bool Hash = false;
- public Client(string uri, string userName, string password) {
- this.uri = uri;
- this.userName = userName;
- this.password = password;
- }
- public string ChangeWorkingDirectory(string path) {
- uri = combine(uri, path);
- return PrintWorkingDirectory();
- }
- public string DeleteFile(string fileName) {
- var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.DeleteFile);
- return getStatusDescription(request);
- }
- public string DownloadFile(string source, string dest) {
- var request = createRequest(combine(uri, source), WebRequestMethods.Ftp.DownloadFile);
- byte[] buffer = new byte[bufferSize];
- using (var response = (FtpWebResponse)request.GetResponse()) {
- using (var stream = response.GetResponseStream()) {
- using (var fs = new FileStream(dest, FileMode.OpenOrCreate)) {
- int readCount = stream.Read(buffer, 0, bufferSize);
- while (readCount > 0) {
- if (Hash)
- Console.Write("#");
- fs.Write(buffer, 0, readCount);
- readCount = stream.Read(buffer, 0, bufferSize);
- }
- }
- }
- return response.StatusDescription;
- }
- }
- public DateTime GetDateTimestamp(string fileName) {
- var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.GetDateTimestamp);
- using (var response = (FtpWebResponse)request.GetResponse()) {
- return response.LastModified;
- }
- }
- public long GetFileSize(string fileName) {
- var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.GetFileSize);
- using (var response = (FtpWebResponse)request.GetResponse()) {
- return response.ContentLength;
- }
- }
- public string[] ListDirectory() {
- var list = new List<string>();
- var request = createRequest(WebRequestMethods.Ftp.ListDirectory);
- using (var response = (FtpWebResponse)request.GetResponse()) {
- using (var stream = response.GetResponseStream()) {
- using (var reader = new StreamReader(stream, true)) {
- while (!reader.EndOfStream) {
- list.Add(reader.ReadLine());
- }
- }
- }
- }
- return list.ToArray();
- }
- public string[] ListDirectoryDetails() {
- var list = new List<string>();
- var request = createRequest(WebRequestMethods.Ftp.ListDirectoryDetails);
- using (var response = (FtpWebResponse)request.GetResponse()) {
- using (var stream = response.GetResponseStream()) {
- using (var reader = new StreamReader(stream, true)) {
- while (!reader.EndOfStream) {
- list.Add(reader.ReadLine());
- }
- }
- }
- }
- return list.ToArray();
- }
- public string MakeDirectory(string directoryName) {
- var request = createRequest(combine(uri, directoryName), WebRequestMethods.Ftp.MakeDirectory);
- return getStatusDescription(request);
- }
- public string PrintWorkingDirectory() {
- var request = createRequest(WebRequestMethods.Ftp.PrintWorkingDirectory);
- return getStatusDescription(request);
- }
- public string RemoveDirectory(string directoryName) {
- var request = createRequest(combine(uri, directoryName), WebRequestMethods.Ftp.RemoveDirectory);
- return getStatusDescription(request);
- }
- public string Rename(string currentName, string newName) {
- var request = createRequest(combine(uri, currentName), WebRequestMethods.Ftp.Rename);
- request.RenameTo = newName;
- return getStatusDescription(request);
- }
- public string UploadFile(string source, string destination) {
- var request = createRequest(combine(uri, destination), WebRequestMethods.Ftp.UploadFile);
- using (var stream = request.GetRequestStream()) {
- using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
- int num;
- byte[] buffer = new byte[bufferSize];
- while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
- if (Hash)
- Console.Write("#");
- stream.Write(buffer, 0, num);
- }
- }
- }
- return getStatusDescription(request);
- }
- public string UploadFileWithUniqueName(string source) {
- var request = createRequest(WebRequestMethods.Ftp.UploadFileWithUniqueName);
- using (var stream = request.GetRequestStream()) {
- using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
- int num;
- byte[] buffer = new byte[bufferSize];
- while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
- if (Hash)
- Console.Write("#");
- stream.Write(buffer, 0, num);
- }
- }
- }
- using (var response = (FtpWebResponse)request.GetResponse()) {
- return Path.GetFileName(response.ResponseUri.ToString());
- }
- }
- private FtpWebRequest createRequest(string method) {
- return createRequest(uri, method);
- }
- private FtpWebRequest createRequest(string uri, string method) {
- var r = (FtpWebRequest)WebRequest.Create(uri);
- r.Credentials = new NetworkCredential(userName, password);
- r.Method = method;
- r.UseBinary = Binary;
- r.EnableSsl = EnableSsl;
- r.UsePassive = Passive;
- return r;
- }
- private string getStatusDescription(FtpWebRequest request) {
- using (var response = (FtpWebResponse)request.GetResponse()) {
- return response.StatusDescription;
- }
- }
- private string combine(string path1, string path2) {
- return Path.Combine(path1, path2).Replace("\\", "/");
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д