تحديد نمط عمل Socket:
بعد أن أنشئنا Socket علينا الأن تحديد نمط عمله اما Blocking Mode أو None-Blocking وأتناء انشاء socket فالنمط الأفتراضي الدي سيعمل عليه هو Blockingولتحديد أي نمط تريد نستعمل الدالة WSAAsyncSelect أو setsockopt وأنا سأشرح الدالة WSAAsyncSelect الخاصة بالويندوز.
هده الدالة تأخد Syntax التالي:
WSAAsyncSelect PROTO socket:DWORD, hwnd:DWORD, msg:DWORD, Event:DWORD
البرامترات:
socket: مقبض socket الدي أنشئناه من قبل.
hwnd:مقبض النافدة التي سوف ترسل لها الرسائل أو الأحدات كحدت غلق النافدة WM_CLOSE...
msg:يمتل عنوان أو رقما معين من اختيارك لكي تبين أي رسالة خاصة بك وهدا شبيه برسالةWM_COMMAND حيت بداخل هدا الحدت يمكنك عمل أشياء أخري اجراء أحدات أخري.
Event:يمتل نوع الأحدات التي سوف تستقبلها وهناك عدة أحدات من بينها:
FD_READ :لكي تجعل برنامج يرسل لك حدت القرائة أو استقبال البينات (recv).
FD_WRITE :لكي تجعل برنامج يرسل لك حدت ارسال البينات حين يحين وقته (send).
FD_ACCEPT : لكي يرسل البرنامج حدت استقبال الاتصالات حين يأتي اتصالincoming connections
FD_CONNECT:لكي يرسل حدت بدأ الاتصال حين يحن وقت الأتصال.
القيمة المرجعة من الدالة:
ادا نجح الاستدعاء ترجع القيمة NULL أما ادا فشلت ترجع قيمة SOCKET_ERROR ويمكنك استعمال الدلة WSAGetLastError لمعرفة نوع الخطأ.
ملاحضات:
عندما يحين وقت حدت معين تقوم مكتبات winsock بارسال رسالة الي البرنامج . وليعرف البرنامج نوع الحدت:
الكملة العليا high word في البرامتر lParam يوجد بها رقم الخطأ فقط ادا حدت خطا ادا لم يحدت تحمل 0.اما في الكلمة الدنيا فتحمل نوع الحدت FD_CONNECT...أما البرماتر wParam فيحمل socket descriptor أو مقبض السوكت الدي ستصل أو سيستقبل الاتصالات.
تريد الغاء ارسال رسائل الخصة بsocket عليك استدعاء الدالة WSAAsyncSelect مرة أخي مع وضع 0 في البرامتر الأخير الخاص بالأحدات Event.
لاحض الصورة:
الصورة في المرفقات
لتحميل الموضوع علي شكل كتاب BDF المرجو الضغط هنا:
http://www.4shared.c.../___online.html
نلتقي في الدرس المقبل ان شاء الله.