تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سلسلة دروس في إحتراف الوينسوك ( موضوع متجدد )
#4
الدرس الثالث :

مشروع نقل الملفات

من المعروف أن إرسال ملف حجمه 30 بايت أو 90 بايت هي عملية سريعة إذ تكون في نطاق قدرة الوينسوك على الإرسال ، ولكن ماذا نفعل إذا كان حجم الملف 1 ميغا بايت
( 1024 بايت ) ... هنا نصاب بالملل .

الحل هو تقسيم الملف وإرسال كل جزء منه على حدة ، وتجميعها في ملف واحد في جهاز الخادم ، هذا بإختصار . أما العمليات التي تتم أثناء الإرسال فهي كالتالي :

فتح الملف بصيغة ثنائية Binary :

تتم عملية فتح الملف بهذه الصيغة بثلاث خطوات وهي :

إقتباس : تعريف متغير جديد.
إعطائه القيمة FreeFile .
فتح الملف على هيئة المتغير بصيغة Binary .

وتكون كالتالي :


إقتباس :Dim F
F = FreeFile
Open "File" for Binary as F


حيث إن ( File ) هو إمتداد الملف .


قراءة جزء معين من الملف :

تتم عملية فتح الملف بهذه الصيغة بثلاث خطوات وهي :

إقتباس : تعريف متغير جديد.
قراءة جزء معين منه Space .
حفظ البيانات بداخله Get .



PHP كود :
Dim C 
Space (2048
Get # F,, C 






حساب عدد ال Bytes :

تتم عملية فتح الملف بهذه الصيغة بخطوتين :

اقتباس: تعريف متغير جديد.
حساب الحجم Lof .



PHP كود :
Dim A 
Lof (F


الكتابة على الملف Put :


PHP كود :
Put #F, , Data 


خطوات إرسال ملف :

إقتباس : • برمجة إجراء ( Sub ) يحتوي على خوارزميات التقسيم والإرسال .
• إرسال الملف من العميل .
• إستقبال أجزاء الملف في الخادم .
• كتابة المعلومات على الملف
.

هذا بإختصار ،،،،،، تابع الشرح لتعرف أكثر :

سأقوم بشرح إرسال ملف صغير الحجم ، ( في الغالب 10 كيلو بايت ، إن كان أكثر فلا يعمل الملف بعد الإرسال وذلك لأن الكود البرمجي ضعيف جداً في الإرسال ، ) وأنتظر منكم تطوير أنفسكم للأحسن .

العميل :

الأدوات :

- الوينسوك
- تايمر عدد 2 (الأول لتبيين حالة الوينسوك ، والثاني للإرسال Interval = 3000 )
- 3 صندوق نص ( الأول للمنفذ ، والبقية لإمتداد وإسم الملف ) .
- أداة CommonDialog .
- 2 زر كوماند ( الأول لفتح الملف ، والآخر للإرسال ) .

نضبط الخاصية Index للوينسوك ونجعلها = 0 ( وذلك لإنشاء مصفوفة وينسوك )
والخاصية Enabled للتايمر ونجعلها = False .



النص البرمجي :

في قسم التصريحات العامة ، نعرف الإجراء SendFile .


PHP كود :
Sub SendFile (Index as Integer
Dim wsdt as String 
FreeFile 
Open Text2
.Text for Binary as 
Wsdt 
Space (LOF (f)) 
Get f,, wsdt 
Close f 
Winsock1 
(Index).SendData "Rec" wsdt 
End Sub 


في زر الأمر ( فتح الملف )

PHP كود :
On Error Resume Next 
CommonDialog1
.ShowOpen 
Text2
.Text CommonDialog1.FileName 
Text3
.Text CommonDialog1.FileTitle 



ملاحظة ( عند كتابة أكواد الإتصال في برنامج العميل _ يجب كتابة المقطع Index بداخل أقواس ( index ) بعد كلمة Winsock لأنه تم إنشاء مصفوفة )
مثال :

PHP كود :
Winsock1 (index).listen 


في التايمر ( 2 )


PHP كود :
On Error Resume Next 
SendFile 
(Index
Timer2.Enabled False 



في زر الأمر ( إرسال ) :


PHP كود :
On Error Resume Next 
Winsock1 
(Index).SendData "SSS" Text3.Text 
Timer2
.Enabled True 


يقوم هذا المقطع بإرسال إسم الملف FileTitle الموجود في Text3 . ويقوم بتغيير الخاصية Enabled للتايمر لكي يقوم ب إرسال الملف بعد 3 ثواني .



الخادم :

الأدوات :

- أداة الوينسوك .
- تايمر .
- 3 صناديق نص ( الأول لعنوان الأي بي ، والثاني للمنفذ و الثالث لإستلام إسم الملف).



النص البرمجي :

في قسم التصريحات العامة :


PHP كود :
Dim F as Integer 


في حدث الوينسوك Data Arrival :


PHP كود :
Dim Dat as String 
Winsock1
.GetData Dat 
If Left (Dat3) = "SSS" Then 
Dat 
Right (DatLen (Dat– 3
Text3.Text Dat 
End 
If 
FreeFile 
Open App
.Path "\" & Text3.Text for Binary as F 
'''''' 
If Left (Dat, 3) = "
Rec" Then 
Dat = Right (Dat, Len (Dat) – 3) 
Put F,, Dat 
Close F 
MsgBox "
Transfer Completed
Exit Sub 
End If 


وبالنسبة للتقسيم ( راجع الدرس السابق ) .

تم بحمد الله .
متغيب
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
سلسلة دروس في إحتراف الوينسوك ( موضوع متجدد ) - بواسطة Ahmad Jawad_mybb_import4460 - 17-09-12, 10:10 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  سلسلة دروس الحماية ( للمبتدئين , المتوسطين , المتقدمين ) + تطبيقات جاهزة للاستخدام Ahmad Jawad 6 8,011 02-06-16, 11:45 AM
آخر رد: CLARO

التنقل السريع :


يقوم بقرائة الموضوع: