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

درس في ال winsock

مغلق
بدأه راكان الحنيطي في 14 أبريل 2004 · 16 رد · 7,750 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني و اخواتي المبرمجين العرب هذا هو مثال على استعمال ال winsock

في برنامج Client/Server for chat

ادعو الله ان اكون قد افدتكم.

انا جاهز الى اجابة اي سؤال عن هذه الاداه

Client_Sever.zip

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#2

الاخ Maverick و الاخوة الكرام

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

شو يا اخ Maverick

انت قلت دروس مش برنامج

بعد عمري بارك الله فيك

لكن يا ريت نجد لنا دروس

دروس دروس دروس

من بداية التعامل مع هذه الاداة الي

جميع خصائصها

و لك الشكر اجزله

تم تعديل هذه المشاركة بواسطة إبراهيم الطيب في 4 أبريل 2005 في 15:45

gaza3-3.jpg
#3

انا اكتب بالدرس انتظروا :)

تم تعديل هذه المشاركة بواسطة Maverick في 14 أبريل 2004 في 15:50

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#4

اكيد حنا في انتظارك خوي

بس اكيد مالك مطول مو

كمان فارسنا باستر

ابراهيم الطيب

gaza3-3.jpg
#5

لعمل برنامج يتعامل مع الشبكات يجب اضافة الاداة من Project->Components->Microsoft Winsock و من ثم كتابة الكود لها.

لعمل برامج الكلاينت يجب عليك معرفة الدالات الاتية:

Connect(RemoteHost,Port): هذه هو ال function الذي يعمل Connection مع المضيف.
Close() لاغلاق الConnection
GetData(Buffer, Type,Size): هذا لجلب المعلومات عند استقبالها.

و يجب ايضا معرفة ال events الاتية:

Private Sub Winsock1_Connect(): هذا الحدث يتم اطلاقه عند شبك الاداة مع المستضيف.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long): اما هذا الحدث  فيتم اطلاقه عند استلام معلومات. التي يتم جلبها ب GetData function علما بان Bytes total هو حجم المعلومات المستلمة بالبايت.

الشئ الاول الذي يمكن ان تفعله هو Connect وهذا هو مثال:

Winsock1.Connect “127.0.0.1”,3500

حيث ان 127.0.0.1 هو ال اي بي لكومبيوتر الذي يعمل عليه الكلاينت

3500 هو الport

بعد ذلك يجب عليك ان تنتظر الحدث :

Winsock_Connect()

لمعرفة ان الاداة قد بدأت ال Connection

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

في هذا الحدث تكون قد عرفت ان الاداة استقبلت بعض المعلومات التي عليك جلبها:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
      Dim Data As String
      Winsock1.GetData Data
      MsgBox Data
End Sub

اما عن ال server فيجب عليك معرفة اشياء اخرى:

.LocalPort: الذي ستبحث الاداة عن ال Connection من خلاله.
.Listen : لجعل الداة بالبدء بالبحث.
.Accept(RequestID): الفنكشن لجعل الاداة بقبول ال Connection المعرف بمفتاح RequestID

و الاحداث:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
حيث انك تعطي ال RequestID لل accept function للقبول.

و هذا هو مثال:

Private Sub Form_Load()
Winsock1.LocalPort = 3500
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Accept requestID
End Sub

تم تعديل هذه المشاركة بواسطة Maverick في 14 أبريل 2004 في 16:09

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#6

مجهود طيب بإذن الله ، أهم شىء المواصله و إكمال باقى وظائف و إستخدامات هذه الأداه

#7
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

تستخدم لمعرفة الخطأ الذي حصل اثناء ال connection

مثال:

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)


MsgBox "Sorry, an error number " & Number & " has occurd:" & vbCrLf & Description
End Sub

Private Sub Winsock1_SendComplete()

هذا الحدث يتم اطلاقه عندما تنتهي ال winsock من ارسال المعلومات.

مثال:

Dim Data As String

Private Sub Command1_Click()
Data = "HI"
Winsock1.SendData Data
End Sub

Private Sub Winsock1_SendComplete()
MsgBox "Data is sent"
End Sub

Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)

يتم اطلاقه عندما يكون الارسال جاري.

مثال:

Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
Label1.Caption = bytesSent & " has been sent and " & bytesRemaining & " bytes are remaining"
End Sub

تم تعديل هذه المشاركة بواسطة Maverick في 15 أبريل 2004 في 23:30

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#8

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

فعلا شي جميل

بس يا ريت كمان اكتر و اكتر

اللهم انعمت فزد

ابراهيم الطيب

السودان الخرطوم

gaza3-3.jpg
#9

اسف Maverick و الاخوه الاعزاء

بس هو سؤال بسيط ياريت اجد الاجابه عندكم

السؤال:

اعمل في برنامج (التذكير بمواعيد الصلاة)

المراد من البرنامج ان يؤذن عندما يحين موعد الصلاة

كذلك تظهر شاشه صغيرة مكتوب عليها حان الان موعد

صلاة ...... علي حسب الصلاة وعندما تظهر هذه الشاشه

يبدأ الاذان يعني انا عملت تشغيل الصوت عند حدث

تحمل الفورم (الشاشة)

الحمد لله تمت هذه المرحله ولكن المشكله

اريد ان تظهر هذه الشاشه علي كل اجهزة الـ Client

اسف اذا نسبت اخباركم بان عليه ان يعمل في شبكه

محليه LAN صغيره

فياريت الطريقه اللي تظهر بيها الشاشه السابقة (اللي يؤذن فيها البرنامج )

ياريت اللي يعرف ما يبخلش علي

المحاولة مرفقة ادناه

بس ماهي كامله ناقصها الملف تبع الاذان

و ختي يعمل معكم بس حط اي ملف صوتي

في مسار الرنامج وسميه azan

gaza3-3.jpg
#10

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

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#11

سأتكلم الان عن ال properties في هذه الاداة:

State: تعطيك حالة الاداة. من هذه الحالات:

sckClosed
sckClosing
sckConnected
sckConnected
sckConnectionPending
sckError
sckHostResolvied
sckListening
sckOpen
sckResolvingHost

مثال:

Dim state As MSWinsockLib.StateConstants
state = Winsock1.state
If state <> sckClosed Then
    Winsock1.Close
End If

Dim state As MSWinsockLib.StateConstants
Winsock1.Connect "127.0.0.1", 3500
Do Until state = sckConnected
الانتظار الى ان يتم شبك الداة مع المستضيف.
    state = Winsock1.state
    DoEvents
loop

اما عن Winsock1.LocalIP فانها تعطي ال IP address للحاسب الذي يعمل عليه البرنامج.

Winsock1.LocalPort هو المنفذ الذي ستقوم الاداة بالبحث فيه عن Connection مثال:

Winsock1.LocalPort = 3500
Winsock1.Listen

RemoteHostIP هو ال IP address للحاسب الذي يعمل عليه البرنامج Serverاو نسخة اخرى من ال Client

لقد تم سؤالي عن الفرق بين الدالتين:

GetData

PeekData

و كل ما اعرفه كفرق بينهما انه ال GetData عندما يتم استعاؤه فان المعلومات المستقبلة سيتم نقلها الى المتغير الذي حددته:

Dim Data As String
Winsock1.GetData Data

في هذه الحالة سيتم نقلها من الاداة الى المتغير Data.

اما عن ال PeekData فان المعلومات تنسخ ثم تنقل الى المتغير بحيث يمكن الرجوع الى ال Data لاحقا حتا ولو استعيت PeekData مليون مرة :P

تم تعديل هذه المشاركة بواسطة Maverick في 19 أبريل 2004 في 22:20

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#12

و هذا مثال اخر على استعمال ال Winsock

بروكسي لل MSN Messenger بالسورس

proxy.zip

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#13

السلام عليكم

اسف ايها الاخوة

ولكن اوجه مشكله في الرفع (ارفاق الملفات )

ابراهيم الطيب

السودان الخرطوم

gaza3-3.jpg
#14

موضوع رائع فعلا اتمنى الاستمرار فيه

وجزاك الله خيرا

تحيــــــــاتي

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

#15

لدي تعليق

ليس كل الملفات يمكن إرسالها بنفس الطريقه ، فقد حاولة ارسال ملف صوتي بهده الطريقه و لكن لم تنفع ، فارجو المساعده فانا بحاجه ماسه لارسال ملف صوتي.

علما انني طبقت نفس الطريقه على ملفات نصية و على هيئة حزم و تنفدت

وجزاكم الله خيراً

#16

لدي سؤال مهم جدا

اذا تم ارسال رسالة من A الى B فكيف يمكن قراءة هذه الرسالة من الذاكرة قبل ان تصل الى الجهاز B.

#17

هل يوجد شرح للبروتوكول UDP إذا كان أحد يعرف كيفية التعامل معة فلا يبخل وأرجو أن يكون الشرح ملف PDF

إن لم يسطتع فل يقم بعمل كموضوع منفرد

my new site click here

هذا الموضوع مغلق.

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