حسين احمد طالب

كيفية إرسال ملفات كبيرة الحجم جدا عبر بروتوكول TCP

11 ردود في هذا الموضوع

أفضل وسيلة لإرسال ملفات كبيرة الحجم جدا هي تقطيع الملف المرسل إلى قطع صغيرة وإرسالها إلى الطرف الثاني قطعة قطعة ثم يقو م الطرف الثاني بتجميعها من جديد لأن إرسال ملف بحجمه الطبيعي تضيع معظم البيانات المرسلة في معظم الحالات مرات تسلم الجرة ويسلم الملف كاملا وبما إننا نحتاج في بعض الحالات إرسال ملف حجمه (1.5GB) وغيره من الأحجام فلا بد من استخدام وسيلة ما.!

فكيف تكون الطريقة لأسال ملف كبير الحجم........؟

لنفرض أن لدينا صورة حجمها (6794 byte ) وأن نضريه التقطيع لدينا تقطع الملف إلى أجزاء كل جزء (بلوك) حجمه ( byte 2048 ) على حدة وترسله وحده هكذا

01314976376.png

تم يرسل البلوك الثاني ثم الثالث ثم يبقى جزء اقل من (2048 byte) سوف يرسله أيضا وحده ثم بعد اكتمال التسليم يقوم الطرف الثاني بتحويل البايتات المستلمة إلى ملف

فلنكون برنامجين منفصلين بشكل التالي احدهما للأرسال والأخر للأستلام

01314974957.png

خطوات الإرسال والاستلام برمجيا .؟

1.يقوم المرسل بإرسال رسالة إلى المستلم تحوي حجم الملف وأسمه

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

3.يقوم المستلم بأرساغ رسالة إلى المرسل يخبره بأنه جاهز لاستلام البيانات إذا لم يكن مشغول أو يرسل مشغول إذا كان مشغولا

4. إذا أرسل المستلم رسالة انه جاهز للاستلام سيقوم المرسل بإرسال الملف جزء جزء وبنفس الوقت يستلم المستلم الملف جزء جزء

5.عندما يصبح حجم الملف المستلم مساويا للحجم الذي أرسل في بداية البرنامج يقوم المستلم بتحويل هذه البايتات إلى ملف ويحفظه بالاسم الذي أرسل إليه

حمل المثال من هنا

http://www.4shared.com/get/tmMP4_WY/send_large_file_by_TCP.html

send large file by TCP.rar

تم تعديل بواسطه فادي عبدالقادر
رفع الملف إلى المشاركة
5

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

شكرا اخي على المجهود الرائع .. بالتوفيق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عمل وشرح مميز

للفائدة سيتم تثبيت موضوعك ونتمنى منك الإستمرار بطرح مواضيع جيدة مثل هذه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لو سمحت يابشمهندس انا جديد هنا

وكنت عاوز اعرف احنا بنبرمج ببرنامج ايه

يعنى بكتب الاكواد فى كوبايلر ايه

لانى لحد دى الوقت محدش ذكر البرنامج اللى بيترمج بيه

شكرا لحضرتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لو سمحت يابشمهندس انا جديد هنا

وكنت عاوز اعرف احنا بنبرمج ببرنامج ايه

يعنى بكتب الاكواد فى كوبايلر ايه

لانى لحد دى الوقت محدش ذكر البرنامج اللى بيترمج بيه

شكرا لحضرتك

جميع المواضيع في هذا القسم تتم بتقنية(.NET) التي تشمل لغتين(c# & visual basic) ولتشغيل اكواد هذا القسم اذا كان نظام تشغيك جهازك ويندوز يجب ان يكون لديك (Microsoft Visual Studio ) واحدث نسخة منه 2010

اما اذا كان لينوكس فيجب ان يكون لديك برنامج mono

تم تعديل بواسطه المهندس الليبي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

الأخ الكريم ... حسين شكرا على المقال الرائع جدا .... وأحب ان اضيف نقطة سيكون من الجميل لو أخذتها بالحسبان .... نحن نتكلم هنا عن ملفات كبيرة الحجم (بالجيجا بايت) فمن المهم عندها الإهتمام بالذاكرة .... فبملاحظة سريعة على الكود نجد انه بعد ان يستلم الطرف الثاني اسم وحجم الملف المراد إراسلة يقوم بعمل مصفوفة بايتات (في الذاكرة !) ليتم الإستلام إليها ثم بعد ذلك تخزين الى ملف ...

هذا امر بحاجة الى اعادة نظر .... خاصة اذا تخيلت انني اريد ان ارسل لنقل محتوايات قرص ديفي دي مضغوط في ملف ... اربعة جيجا ! ... من المرهق جدا للحاسوب وبقية البرامج العاملة حجز هذه المساحة من الذاكرة لبرنامج واحد حتى وان كان الملف اصغر من ذلك بكثير (واحد جيجا شي غير طبيعي ابدا ) ..

الاقتراح الذي يتم عمله هنا الكتابة مباشرة الى القرص الصلب يعني مع وصول كل باكت من المرسل يتم كتابته دايركت الى الملف الذي سينمو بالتدريج مع عملية الاستلام (كما يمكن ان يتم حجز المساحة كاملة في القرص الصلب من البداية وبعدها الكتابة بالتدريج للحصول على اداء اافضل بقليل) ..... واذا كنت مهتم توجد حلول افضل من هذه ايضا ...

اعود فا اشكرك على البرنامج الجميل ... الذي لن يضيف المقترح البسيط هنا اي شيء .. ولكنه للفائدة فقط

السلام عليكم

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وعليكم السلام

اخي رغيد شكرا لك على هذا الاقتراح الرائع وفعلا هذا الاقتراح هو الصحيح الكتابة مباشرة على القرص الصلب بدون اخذ مساحات كبيرة مؤقتة من الذاكرة

شكرا لك مرة اخرى

------------------------------------------------

قائمة كتبي

خطوة بخطوة نحو قاعدة بيانات ترضي العميل بالفجوال بيسك دوت نت

01332574371.jpg

http://hussienahmmed.blogspot.com/2011/09/blog-post_15.html

خطوة بخطوة لتعلم لغة سي وسي بلاس

01332574646.png

http://hussienahmmed.blogspot.com/2011/08/cc.html

بروتوكولات الشبكات TCP,UDP,IP وبناء التطبيقات بالبروتوكول الملائم فيجوال بيسك دوت نت

01332574343.jpg

http://hussienahmmed.blogspot.com/2012/03/tcpudpip.html

تم تعديل بواسطه حسين احمد طالب
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اخي حسين كيف نستطيع استنتاج الامتداد والمسار في الارسال وكيف يتم استقبالها

الله يوفقك اخي حسين

كيف يمكنني ارسال نص منسق عن طريق الsocket

مثل حجم الخط نوع الخط لون الخط

ارجو الرد ياشباب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اخي الكريم انضر في خطوات الارسال ما هو موضح في الخطوة

الأولى يرسل حجم الملف واسمه اكيد مع اسمه يرسل امتداد الملف المراد ارساله

تحياتي

------------------------------------------------

قائمة كتبي

خطوة بخطوة نحو قاعدة بيانات ترضي العميل بالفجوال بيسك دوت نت

01332574371.jpg

خطوة بخطوة لتعلم لغة سي وسي بلاس

01332574646.png

بروتوكولات الشبكات TCP,UDP,IP وبناء التطبيقات بالبروتوكول الملائم فيجوال بيسك دوت نت

01332574343.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .