PDA

View Full Version : مدیریت و انتقال فایل های Client ها توسط Server



bpzone
سه شنبه 31 فروردین 1389, 08:39 صبح
با سلام به همگی
فرض کنید یک شبکه داشته باشیم که توی اون 100 تا Client وجود داشته باشه
توی تمام این کامپیوتر ها ، در یک مسیر مشخص یک سری فایل وجود داره
این کامپیوترها هر کدوم توی یک شهر هستند ؛ واسه همین نمیشه اون فایل ها رو دستی برداشت و به سرور انتقال داد.

حالا
1- چه جوری میشه اون فایل ها رو در خود Client ها فشرده سازی کرد
2- چه جوری این فایل ها رو با یک برنامه و در یک زمان بندی مشخص به سرور انتقال داد
3- اگه حجم فایل ها زیاد باشه ، چه جوری میشه با یک برنامه انتقال اونها رو به سرور مدیریت کرد.

این برنامه تماماً باید در سمت سرور باشه و فقط دستورات رو با TCP/IP به Client ها ارسال کنه و کارهای مورد نظر رو انجام بده ...

با #C امکان پیاده سازی این برنامه وجود داره ؟

razavi_university
سه شنبه 31 فروردین 1389, 12:15 عصر
یه برنامه client-server با سوکت بنویسید، فایلها را با binary soap سریالایز کنید، ارسال کنید به سرور و در سرور دسریالایز کنید

bpzone
سه شنبه 31 فروردین 1389, 12:40 عصر
یه برنامه client-server با سوکت بنویسید




این برنامه تماماً باید در سمت سرور باشه و فقط دستورات رو با TCP/IP به Client ها ارسال کنه و کارهای مورد نظر رو انجام بده ...

با C#‎‎ امکان پیاده سازی این برنامه وجود داره ؟

razavi_university عزیز
ممنون از راهنماییتون
مشکل اینجا هست که سمت کلاینت در حال حاضر نمیشه برنامه ای رو نصب کرد
تمام کارها باید توسط سرور مدیریت و انجام بشه ...
حالا چی پیشنهاد می کنید ؟!

bpzone
سه شنبه 31 فروردین 1389, 23:14 عصر
هیچ کدوم از دوستان ایده ای نداره :افسرده:

razavi_university
چهارشنبه 01 اردیبهشت 1389, 08:59 صبح
پرمیشن های مورد نیاز برای دسترسی به فایلها را دارید؟
پسورد ادمین سیستمها را دارید؟
سرعت دسترسی به کلاینت ها چقدر است؟

bpzone
یک شنبه 05 اردیبهشت 1389, 10:29 صبح
پرمیشن های مورد نیاز برای دسترسی به فایلها را دارید؟
پسورد ادمین سیستمها را دارید؟
سرعت دسترسی به کلاینت ها چقدر است؟

پرمیش لازم وجود داره
پسورد آدمین در دسترس هست
سرعت شبکه، سرعت قابل قبول و مطلوبی هست
در کل هر تغییری که لازم باشه، روی کلاینت ها قابل اجرا هست و اجازه رو داریم

الان فقط لازم داریم که به کلاینت ها از طریق این برنامه متصل بشیم و فایل های مورد نظر رو به سرور منتقل کنیم ؟!؟!؟!؟

چی کار باید کرد ؟
واسه انتقال فایل ها چه راهی رو پیشنهاد می کنید ؟!؟

peymanjon
یک شنبه 05 اردیبهشت 1389, 10:48 صبح
دوست عزیز اگه به تغییرات روی کلاینت ها دسترسی دارید و میتونید فایروال آنها را off کنید ،چرا برای انتقال فایلها از کامپوننت remote desktop از طریق server روی هر client که میخوای اقدام نمیکنید؟

bpzone
یک شنبه 05 اردیبهشت 1389, 11:46 صبح
دوست عزیز اگه به تغییرات روی کلاینت ها دسترسی دارید و میتونید فایروال آنها را off کنید ،چرا برای انتقال فایلها از کامپوننت remote desktop از طریق server روی هر client که میخوای اقدام نمیکنید؟

دوست عزیز
فرض کنید که 1000 تا دستگاه توی کشور هست که ما نیاز داریم هر روز یک سری فایل رو به سرور منتقل کنیم و بعد عملیات لازم رو روی فایل ها انجام بدیم ...

این کار باید توسط یک نرم افزار و بصورت اتوماتیک انجام بشه، نه بصورت دستی :افسرده:

razavi_university
یک شنبه 05 اردیبهشت 1389, 14:00 عصر
خوب با دستور کپی معمولی میتونین اینکارو بکنین، آدرس مبدا و مقصد هم که مشخصه

bpzone
یک شنبه 05 اردیبهشت 1389, 14:16 عصر
بله
اگه بخواهیم از دستورات خود سیستم عامل استفاده منیم، میشه
مثلاً با دستور زیر فولدر مورد نظر رو Map می کنیم روی سیستم خودمون و به راحتی کپی رو انجام می میدیم



net use x: \\210.12.0.233\ncr admin1234 /user:administrator
اما این کار کند هست و شما هیچ مدیریتی ندارید
من قصد دارم که با برنامه نویسی و سوکت بتونم این عمل رو پیاده سازی کنم :افسرده:

علیرضا حسن زاده
یک شنبه 05 اردیبهشت 1389, 14:17 عصر
میتونید یه ActiveX طراحی کنید و تو یه صفحه وب قرار بدین. بعد هروقت کلاینت صفحه رو باز کرد و دستور ارسال رو زد ActiveX مورد نظر فایل های رو فشرده کنه و برای سرور ارسال کنه

bpzone
یک شنبه 05 اردیبهشت 1389, 15:16 عصر
برنامه تحت وب نیست دوست عزیز
با سیستم های کلاینت هم کسی کار نمی کنه و کاربری ندارند که بخواد روی کلاینت عملی رو انجام بده ...
می خوام روی کلاینت ها یک سری فولدر share کنم و هر زمان که خواستم توسط یک برنامه فایل های مورد نظر رو به سرور انتقال بدم :افسرده:

razavi_university
دوشنبه 06 اردیبهشت 1389, 08:50 صبح
منظورم استفاده از دستور کپی در سی شارپ بود، از سوکت نمی تونین استفاده کنین چون سوکت ها جفتی هستند(client-server) و به تنهایی کاری از دستشون بر نمیاد و نمیشه فقط از طریق سرور کاری بدون وجود برنامه ای روی کلاینت ها از سوکت استفاده کرد.
چون مسیر فایل مشخص است می تونین یه زمانبندی واسه برنامه تون مشخص کنید که در اون زمانها فایل مشخصی که واسش تعریف کردین رو به سرور انتقال بده(کپی کنه)

bpzone
دوشنبه 06 اردیبهشت 1389, 10:05 صبح
جناب razavi_university با تشکر

1- درود بیکران بر شما باد :بوس:

2- اگه برنامه رو بصورت کلاینت - سرور بنویسم، آیا با سوکت امکان انتقال فایل وجود داره ؟ با سوکت میشه فایل منتقل کرد در کل ؟! :افسرده:

قابل توجه دوستان با توجه به فرمایشات آقای razavi_university با استفاده از تابع کپی خود سی شارپ برنامه فعلاً بصورت زیر پیاده سازی شد



private void btn_copy_Click(object sender, EventArgs e)
{
DirectoryCopy(@"\\210.12.0.233\ncr\archive", @".\temp_ncr_new", true);
}

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
{
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
DirectoryInfo[] dirs = dir.GetDirectories();

// If the source directory does not exist, throw an exception.
if (!dir.Exists)
{
throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + sourceDirName);
}

// If the destination directory does not exist, create it.
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
}


// Get the file contents of the directory to copy.
FileInfo[] files = dir.GetFiles();

foreach (FileInfo file in files)
{
// Create the path to the new copy of the file.
string temppath = Path.Combine(destDirName, file.Name);

// Copy the file.
file.CopyTo(temppath, false);
}

// If copySubDirs is true, copy the subdirectories.
if (copySubDirs)
{

foreach (DirectoryInfo subdir in dirs)
{
// Create the subdirectory.
string temppath = Path.Combine(destDirName, subdir.Name);

// Copy the subdirectories.
DirectoryCopy(subdir.FullName, temppath, copySubDirs);
}
}
}

علیرضا حسن زاده
دوشنبه 06 اردیبهشت 1389, 17:31 عصر
جناب razavi_university با تشکر

1- درود بیکران بر شما باد :بوس:

2- اگه برنامه رو بصورت کلاینت - سرور بنویسم، آیا با سوکت امکان انتقال فایل وجود داره ؟ با سوکت میشه فایل منتقل کرد در کل ؟! :افسرده:

قابل توجه دوستان با توجه به فرمایشات آقای razavi_university با استفاده از تابع کپی خود سی شارپ برنامه فعلاً بصورت زیر پیاده سازی شد



private void btn_copy_Click(object sender, EventArgs e)
{
DirectoryCopy(@"\\210.12.0.233\ncr\archive", @".\temp_ncr_new", true);
}

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
{
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
DirectoryInfo[] dirs = dir.GetDirectories();

// If the source directory does not exist, throw an exception.
if (!dir.Exists)
{
throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + sourceDirName);
}

// If the destination directory does not exist, create it.
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
}


// Get the file contents of the directory to copy.
FileInfo[] files = dir.GetFiles();

foreach (FileInfo file in files)
{
// Create the path to the new copy of the file.
string temppath = Path.Combine(destDirName, file.Name);

// Copy the file.
file.CopyTo(temppath, false);
}

// If copySubDirs is true, copy the subdirectories.
if (copySubDirs)
{

foreach (DirectoryInfo subdir in dirs)
{
// Create the subdirectory.
string temppath = Path.Combine(destDirName, subdir.Name);

// Copy the subdirectories.
DirectoryCopy(subdir.FullName, temppath, copySubDirs);
}
}
}

برای اینکار می تونید یه سرویس هم بنوسید با سیستم اجرا بشه و در زمان ها خاص فایل های مشخص رو بصورت خودکار فشرده کنه و برای سرور بفرسته از راه دور هم میشه کنترل خوبی روش داشت مثل تنظیم زمان ارسال و...

bpzone
سه شنبه 07 اردیبهشت 1389, 07:44 صبح
فشرده منظور شما از سرویس دقیقاً چی هست دوست عزیز ؟

یک برنامه روی کلاینت ها نصب کردم که هر روز اطلاعات لازم رو فشرده می کنه و حجم باری که قرار روی شبکه بشینه رو کم می کنه :چشمک:

bpzone
سه شنبه 21 اردیبهشت 1389, 15:41 عصر
برای انتقال فایل به سیستم های که نیاز به User و password دارند ، باید چی کار کرد
چه جوری میشه قبل از انجام دستور کپی، اتصال رو برقرار کرد ؟
:افسرده:

razavi_university
چهارشنبه 22 اردیبهشت 1389, 08:02 صبح
2- اگه برنامه رو بصورت کلاینت - سرور بنویسم، آیا با سوکت امکان انتقال فایل وجود داره ؟ با سوکت میشه فایل منتقل کرد در کل ؟! :افسرده:

الان یوالتون رو دیدم، بله امکان اینکار وجود داره


این کد رو برای سوال آخرتون امتحان کنید:


AppDomain.CurrentDomain.SetPrincipalPolicy(System. Security.Principal.PrincipalPolicy.WindowsPrincipa l);
System.Security.Principal.WindowsIdentity idnt = new System.Security.Principal.WindowsIdentity("username@domain", "password");
System.Security.Principal.WindowsImpersonationCont ext context = idnt.Impersonate();

System.IO.File.Copy(@"D:\WorkDir\TempDir\test.txt", @"\\192.168.100.2\Software\Temp\test.txt");
context.Undo();

razavi_university
چهارشنبه 22 اردیبهشت 1389, 08:05 صبح
اینجا رو هم نگاه کنید

WindowsImpersonationContext Class (http://msdn.microsoft.com/en-us/library/5z4b2h41)

bpzone
چهارشنبه 22 اردیبهشت 1389, 12:27 عصر
با سلام و تشکر
من از کد شما بصورت زیر استفاده کردم



AppDomain.CurrentDomain.SetPrincipalPolicy(System. Security.Principal.PrincipalPolicy.WindowsPrincipa l);
System.Security.Principal.WindowsIdentity idnt = new System.Security.Principal.WindowsIdentity("administrator", "admin1234");
System.Security.Principal.WindowsImpersonationCont ext context = idnt.Impersonate();

System.IO.File.Copy(@"D:\Project\temp\temp\Program.cs", @"\\210.12.0.234\pic\behrooz\test_\Program.cs");
context.Undo();
اما با مشکل زیر مواجه شدم



System.Security.SecurityException was unhandled
Message="Incorrect function.\r\n"
Source="mscorlib"
:عصبانی++:

bpzone
چهارشنبه 29 اردیبهشت 1389, 16:37 عصر
دوستان راه حلی برای این مشکل به ذهنتون نمی رسه :افسرده:

:عصبانی++:

bpzone
دوشنبه 03 خرداد 1389, 11:11 صبح
دوستان عزیز
هیچ راهی برای Login کردن به یک دستگاه روی شبکه وجود نداره ؟:عصبانی++:
:گریه:

daniel_0247
دوشنبه 03 خرداد 1389, 13:43 عصر
به این صفحه یه سری بزن (http://forums.asp.net/t/1158404.aspx) ،فکر می کنم میشکلت حل بشه ::