الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشروع (مشاركة) ملفات على الشبكة

رائج
بدأه rober في 24 يونيو 2009 · 74 رد · 6,946 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#51
B.M.AbdelAziZ كتب:

انسى... نحفظها بملف صغير، خفيف، سهل للارسال

أخي محمد سأكون متعب بعض الشيء فأعذرني

سؤال :wink:

ما هو نوع الملف الذي سيتم حفظ البيانات فيه

و كيف يتم التعامل مع البيانات ( حفظ و جلب )

تم تعديل هذه المشاركة بواسطة rober في 30 يونيو 2009 في 20:54

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#52

بسم الله

نعم لنجرب الـ XML

ملف صغير خفيف المشكلة ما هو هذا الملف

سلامي

#53
اقتباس
ما هو نوع الملف الذي سيتم حفظ البيانات فيه

كما قلت نحدد Record نسميه مثلا TSharedFile

الملف يكون File of TSharedFile

الحفظ يكون عند اغلاق البرنامج

الاسترجاع بقرائة الملف يكون عند التنفيذ

اظن انتهت الاسئلة الان، نريد دم :angry:

اقصد code بل اكواد...برمجة

d4baa0.gif
#54

الجمعه ان شاء الله

#55

النقطة الاولى .

ملاحظة : لقد استبدلت StringGrid بال ListView .

المشروع مقسم الى :

خادم و زبون

File_Sharing.rar

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#56

اخي محمد 2 ارجوا ان تنتضرنا فمنذ زمن لم اتعامل مع هذا .

انت تعرف السوق تتغذى قواعد بيانات وتتعشى بها .

شكرا على الرابطة جاري التجربة والملاحضة .

#57

ما شاء الله أخي محمد وقت قياسي

أعذرني أخي محمد لكن المطلوب من المشروع هو الفائدة و التعلم و ليس انجاز مشروع و حسب :blush:

لهذا أشرت في أول مشاركة أن المشروع سيتم تنفيذه خطوة بخطوة صحيح أن الموضوع سيطول لكن سيكون منه فائدة بإذن الله

بعد أن أعتمدنا أن يكون الشكل هو نفس الشكل في المشاركة الاولى لكن سيكون مقسم في مشروعين (server و client) ستكون الخطوة التالية :

تجهيز قسم الـ Server من ناحية عمل المشاركة للملفات وحفظ البيانات في ملف

سأحاول أن أرفق محاولتي مع الشرح اليوم مساء مستعيناً بمرفق الاخ mohfa

تم تعديل هذه المشاركة بواسطة rober في 1 يوليو 2009 في 15:15

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#58

السلام عليكم .

اخي روبر ان لم اقم بشئ غير المطلوب الاول و استعمال ال Record و File of كما قال اخي محمد وكيفية الحفظ و القراءة

و ارسال القائمة لل Clients باستعمال ال Socket .

يعني مازال النقط الاخرى من مثل تحميل الملف المطلوب و ال ....

واعذرني ان كنت قد قمت بشئ غير مطلوب .

تم تعديل هذه المشاركة بواسطة mohfa في 1 يوليو 2009 في 15:47

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#59

السلام عليكم...

قمت بتجربة جزء الـ Server الذي وضعه الأخ mohfa و أجريت عليه بعض التعديلات البسيطة، لكن للأسف لم أتمكن من إعداد ملف RAR أو ZIP لتحميله. على أية حال هذه هي التعديلات:

1. بما أن الـ Client ستصله نسخة من الملف المحفوظة به البيانات (SharedFile)، فإن حفظ الملف عند إغلاق الـ Form فقط يعني أن الـ Client لن تصله أسماء الملفات التي أقوم بإضافتها إلا إذا أغلقت البرنامج. لذلك يجب حفظ ملف المشاركة (باستعمال الإجراء SaveData) كلما تم إضافة ملف أو حذف ملف.

2. الزر Refresh حسب فهمي هو لتحديث القائمة يعتي يجب استعمال LoadData بدل lv.Refresh أو ربما يمكن الاستغناء عنه.

3. إضافة زر لحذف الملف المحدد في الـ ListView و هذا كوده من غير رسالة تأكيد الحذف:

  1.  
  2. procedure TForm1.Button4Click(Sender: TObject);
  3. begin
  4. if lv.Selected <> nil then begin
  5. lv.Items.Delete(lv.Selected.Index);
  6. SaveData(ExtractFilePath(Application.ExeName)+'Shared.Data');
  7. end;
  8. end;
  9.  

4. إضافة معالج الحدث OnEditing لمنع تغيير اسم أي ملف في الـ ListView كالتالي:

  1.  
  2. procedure TForm1.lvEditing(Sender: TObject; Item: TListItem;
  3. var AllowEdit: Boolean);
  4. begin
  5. AllowEdit := False;
  6. end;
  7.  

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#60
mohfa كتب:
واعذرني ان كنت قد قمت بشئ غير مطلوب .

أخي محمد أنت لم تخطأ لتعتذر على العكس تماما أنت سرعت العمل و وفرت الوقت لكن أرجوك لاتنسى المبتدأين أمثالي :blush:

بكل الأحوال

في هذه المحاولة قمت بجمع ما قام به الأخوة mohfa و najy_zl في جزء الـ Server مع أضافة بعض التعديلات و شرح ما تمكنت من شرحه :blush:

في المرفق ستجدون :

1- أضافة تابع الحصول على حجم الملف

2- أضافة تابع الحصول على تاريخ أخر تعديل للملف

3- أضافة تابع حفظ بيانات الملفات في ملف البيانات

4- أضافة تابع أحضار بيانات الملفات من ملف البيانات

مع مراعاة :

1- التأكد إن كان الملف موجود مسبقاً في المشاركة

2- التأكد من وجود الملف و في حال تم تغيير مساره أو حذفه سيتم إزالته من القائمة

5- أضافة حدث للزر (...) لتحديد الملف

6- أضافة حدث الزر (Add) لإضافة بيانات الملف إلى القائمة و إلى ملف حفظ البيانات

7- أضافة حدث تحديث قائمة الملفات

8- أضافة حدث أحضار بيانات الملفات من ملف حفظ البيانات عند بدء المشروع

9- أضافة حدث إلغاء مشاركة ملف

10- أضافة حدث إلغاء تغيير أسم الملف المشارك في القائمة

Server.rar

تم تعديل هذه المشاركة بواسطة rober في 1 يوليو 2009 في 20:34

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#61

اخي ماهي النقطة التالية ام ننتظر قليلا

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#62
اقتباس
اخي ماهي النقطة التالية ام ننتظر قليلا
:stop:
#63

أخي محمد سننتظر حتى يعطينا الأخ زكيري الضوء الأخضر لنكمل في الخطوة التالية

و بالنسبة لمكون الأتصال أقترح أستخدام Server&Client Socket نظرا لما جاء في كلام الأخ محمد عبدالعزيز

B.M.AbdelAziZ كتب:
مع استخدام مكونات Socket القياسية تتعب اكثر لكن تفهم جيدا

فالمطلوب من المشروع هو الفهم قبل كل شيء

و بعد الأنتهاء نعمل بنصيحة الأخ ناجي و نصنع نسخ تستخدم الـ Indy و ICS

بإنتظار الأخ زكيري

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#64

السلام عليكــم ورحمـة الله وبركاتــه ،،

الخطوة التالية هي ارسال امر الى الـ Server

نخبره ان يرسل قائمة بالملفات المتاحة للمشاركة

ClientSocket1.Socket.SendText('GetFile');//ملاحظة الكود كتبته  الآن لان دلفي ليس معي الآن

بعدها يستقبل السيرفر الأمر و ينفده

الخطوة التالية هي الاصعب

سلامي

#65

السلام عليكم

عمل جيد اخي محمد وروبر موفقين ان شاء الله

ماهي النقطه الموالية لعلي استطيع المشاركه ان لم يسبقنا احي محمد .

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 4 يوليو 2009 في 00:43

#66

التقطة التالية :

تجهيز الـ Server لأرسال قائمة بالملفات المشاركة عند طلبها من الـ Client

تجهيز الـ Client لأرسال طلب قائمة الملفات و أستقبال القائمة و عرضها في الـ listview

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#67

اخي عبد العالي مارائك ان تقوم انت بهذه الخطوة رغم انني اعلم انك مشغول .

اخي روبر هذه النقطة موجودة في المرفق الاول هل نعيدها ام نعيد صياغتها فقط

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#68

أخي محمد في المرفق قمت بإضافة مربع تحديد الحاسب الذي سنتصل به إلى طريقتك

أرجو منك أن ترى المرفق و التأكد

File_Sharing.rar

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#69

نعم اخي فعلا بدات اقرا اليوم في المرف الاخير ولكن هناك ضيوف اليوم كما اني في الحقيقه يجب ان اراجع دروسي لاني فعلا نسيت برمجة client server بهذا الشكل .

لكن ساحاول ان شاء الله اليوم ان وجدة الوفت الكافي .

#70

اخي روبر بما ان كل ال Clients يتصلون بServer واحد اقصد انه يوجد Server واحد فلماذا مربع اختيار الجهاز و الذي هو Server اللهم في حالة ان ال Clients يمكنهم تحميل الملفات من بعضهم .

والله اعلم

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#71

أخي محمد

لن نعتمد على سيرفر 1 فقط فكل حاسب سيكون لديه client & server

و الـ Client سيتصل بـ Server الحاسب الهدف

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#72

الخطوة التالية :

طلب الملف من طرف الـ client و قيام الـ server بإرسال الملف المطلوب

هناك طريقتان لكن فيها مشاكل

1- طريقة الأخ محمد ( mohfa ) رحم الله والده

و هي نفس الطريقة التي تم بها إرسال ملف قائمة المشاركة لكن فيها مشكلة و هي

وقت طويل في تحميل الملفات الكبيرة و أستهلاك كبير للذاكرة

2- طريقتي :blush: و هي الطريقة التقليدية المتعارف عليها

var
  ilen : int64;
  bfr : pointer;
begin
  try
	ilen := socket.receivelength;
	getmem(bfr, ilen);
	progressbar1.position := progressbar1.position + ilen;
	try
	  socket.receivebuf(bfr^, ilen);
	  fstream.write(bfr^, ilen);
	finally
	begin
	  freemem(bfr);
	  if progressbar1.position = progressbar1.max then
	  begin
		fstream.free;
		fstream := nil;
		statusbar1.panels[0].text := 'done';
		progressbar1.position := 0;
	  end;
	end;
	end;
  except
  on e : exception do
	messagedlg('Get file has faild',mterror,[mbok],0);
  end;
end;

هذه الطريقة لا تستهلك وقت كبير لكن فيها مشكلة و هي أستهلاك كبير للمعالج :wacko:

هل من أقتراحات لعملية طلب الملف و إرساله ؟؟

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#73

اخي روبر لماذا توقف المشروع

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#74

أخي محمد المشروع لم يتوقف فهو شبه مكتمل نظريا

توقفنا عند :

البطئ في الأرسال و الأستهلاك الكبير للذاكرة في طريقتك ( طبعا نتحدث مع الملفات ذات الحجم الكبير )

الأستهلاك المخيف للمعالج في طريقتي -_-

أنا الأن أجمع بعض المعلومات عن مكونات أخرى و بدأت بـ Indy لعلها تكون أسرع و ذات أستهلاك أقل للموارد

هل عندك أقتراح لحل المشاكل السابقة ؟؟

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#75

اخي rober الطريقة التي طرحتها لا دخل لها في استهلاك المعالج بل هي الطريقة الافضل لاستقبال حزم البيانات الكبيرة كما يمكنك من خلالها التحقق من الرأس الخاص بكل دفعة بيانات اذا كنت ترسل حزم بيانات ذات تركيبة خاصة بك ، وفائدة اخري وهي يمكنك من خلال هذه الطريقة قرائة البيانات الواردة في اي مكان في البرنامج ايضا بالقرائة من عنوان المؤشر الخاص بحزمة البيانات تلك .

تم تعديل هذه المشاركة بواسطة prof_1982 في 28 أغسطس 2009 في 18:30

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

مواضيع مشابهة