إرسال البيانات الثنائية عبر بروتوكول أودب (وينسوك) أنا جعل برنامج العميل الذي يتطلب البيانات الثنائية ليتم إرسالها إلى الملقم من خلال بروتوكول أودب. (إم باستخدام التحكم وينسوك) إيف تم استخدام التعليمات البرمجية التالية. ديم بايتكس كما بايت ديم X كما طويل ديم فيلكس كما إنتيرجر Winsock3.LocalPort 10000 Winsock3.RemoteHost 211.233.70.51 Winsock3.RemotePort 9500 فليكس فريفيل فتح App. Path udp1.dat لثنائي كما فيلكس X 1 القيام به حتى X فيليلين (App. Path udp1.dat) 1 احصل على فيلك. X، بيتكس Winsock3.SendData بايتكس X X 1 حلقة إغلاق فيلكس عندما أرسل البيانات بهذه الطريقة، فإنه يرسل 52 حزمة تحتوي على 1 بايت كل بدلا من حزمة واحدة تحتوي على 52 بايت. يعمل هذا الرمز بشكل صحيح لبروتوكول تكب، ولكن أودب لا تعمل نفسها. كيف يمكنني إرسال البيانات الثنائية باستخدام بروتوكول أودب التي سوف ترسل حزمة واحدة فقط من البيانات أنا جعل برنامج العميل الذي يتطلب البيانات الثنائية ليتم إرسالها إلى الملقم من خلال بروتوكول أودب. (إم باستخدام التحكم وينسوك):: إيف تم استخدام التعليمات البرمجية التالية. :: ديم بايتكس كما بايت: خافت X كما طويل: ديم فيلكس كما إنتيرجر:: Winsock3.LocalPort 10000: Winsock3.RemoteHost 211.233.70.51: Winsock3.RemotePort 9500:: فليكس فريفيل: فتح App. Path udp1.dat لثنائي كما فيلكس : X 1: هل حتى X فيليلين (App. Path udp1.dat) 1: الحصول على فيلك. X، بايتكس: Winsock3.SendData بايتكس: X X 1: حلقة: إغلاق فيلكس:: عندما أرسل البيانات بهذه الطريقة، يرسل 52 رزمة تحتوي على 1 بايت لكل منهما بدلا من حزمة واحدة تحتوي على 52 بايت. يعمل هذا الرمز بشكل صحيح لبروتوكول تكب، ولكن أودب لا تعمل نفسها. كيف يمكنني إرسال البيانات الثنائية باستخدام بروتوكول أودب التي سوف ترسل فقط 1 حزمة من البيانات: مرحبا حاول هذا Winsock3.Protocol سكودبروتكول وينسوك ديه سكتكبروتوكول افتراضيا .. بيربلوندونت تأخذ الحياة على محمل الجد على أي حال كنت لن الهروب على قيد الحياة من إيتبوربلسندينغ البيانات الثنائية باستخدام وينسوك إم آسف، هل تقول أن لدي لاستخدام داتاغرام بدلا من ستريم مآخذ لديك هذا العمل أنا باستخدام سوكستريم الآن، وأنا أفضل أن البقاء معها. هل هناك أي طريقة للحصول على هذا لقبول 0x00 وقبول البيانات بعد ذلك، في حين لا تزال تستخدم مآخذ تيار. مرة أخرى، شكرا على كل ما تبذلونه من مساعدة. ميكيو هم، ثاتس غريب. ظننت أن حجة سوكدغرام يجب أن تحدد البيانات الثنائية، بدلا من سوكستريم. : يجب أن تقرأ ريكف وراء أي أصفار في هذه الحالة. : هل أنت متأكد من أنك لا تلتقط البيانات في نوع بيانات السلسلة التي تقوم بطباعتها أو الكتابة إلى ملف أو شيء مع واحد من ستروتينز: يعني، هل أنت متأكد من أنك تقوم بعرض البيانات المستلمة بشكل صحيح أنا آسف، هل تقول أن لدي لاستخدام داتاغرام بدلا من ستريم مآخذ لديك هذا العمل أنا باستخدام سوكستريم الآن، وأنا أفضل أن البقاء معها. هل هناك أي طريقة للحصول على هذا لقبول 0x00 وقبول البيانات بعد ذلك، في حين لا تزال تستخدم مآخذ تيار. مرة أخرى، شكرا على كل ما تبذلونه من مساعدة. : ميكيو:. هم، ثاتس غريب. ظننت أن حجة سوكدغرام يجب أن تحدد البيانات الثنائية، بدلا من سوكستريم. . يجب أن يقرأ ريكف خارج أي أصفار في هذه الحالة. . هل أنت متأكد من أنك لا تلتقط البيانات في نوع بيانات السلسلة التي تقوم بطباعتها أو الكتابة إلى ملف أو شيء مع واحد من ستروتينس. أعني، هل أنت متأكد من أنك تقوم بعرض البيانات المستلمة بشكل صحيح: سوكدغرام لا يعني البيانات الثنائية. وهذا يعني أنك تريد استخدام بروتوكول أودب لإرسال البيانات ويتم إرسال البيانات في داتاغرامز. سوكستريم يعني أنك تريد استخدام بروتوكول تكب وإرسال البيانات كتدفق. المقبس لا يهتم نوع البيانات التي تقوم بإرسالها. كل ما تحتاجه هو مؤشر إلى المخزن المؤقت الذي يحمل البيانات وطول هذا المخزن المؤقت. صفر داخل البيانات لا يعني أي شيء، لها صفر فقط. لا يتم إنهاء البيانات بالصفر كما C - سلاسل هي. المقبس لا يهتم محتوى البيانات. أعتقد أن هناك شيئا خاطئا تتلقى رمز. ربما كنت تستخدم الصفر كما المنهي هناك، وهو أمر سيء للغاية. إذا كنت يمكن أن ترسل التعليمات البرمجية التي تتلقى البيانات هنا أنا يمكن أن تحاول معرفة ما الخطأ في ذلك. هنا هو الرمز الذي أستخدمه. مرة أخرى، أنا جديدة في وينسوك لذا يرجى تحمل معي. الشكر رمز إنت الخادم (باطل) غير موقعة شار recmsg3072 سوكيت سيرفيرد، كلينتفد الاستماع على سوكفد، اتصال جديد على نوفد سوكادرين سيرفيرادر سوكادرين كلينتادر إنت لين إنت j مسغزيز 0 شار سؤال وساداتا وساداتا أونسيغند فيريكيست قصيرة ملف مايك لينجر لينغفار فيركست ماكيورد (2،2 ) إذا كان (وساستارتوب (فيركست، أمبوساداتا) -1) برينتف (تعذر العثور على وينسوك دل) قابل للاستخدام (إكسيت (1) إف ((سيرفيرفد سوكيت (أفينيت، سوكستريم، 0))) -1 بيرور (سيرفر سيد: لا يمكن فتح المقبس) LingVar. lonoff ترو LingVar. llinger 0 إف (سيتسوكوبت (سيرفيرفد، سولوسكيت، سوبينلين، (شار فار) أمبلينغفار، سيزوف (لينغفار)) -1) بيرور (سيرفر سيد: كولدنت بيرفورم سيتسوكوبت) إكسيت (1) serveraddr. sinfamily أفينيت سيرفيرادر. http: سينتيرفرت (سيرفيربورت) serveraddr. sinaddr. saddr htonl (إينادراني) ميمست (أمب (serveraddr. sinzero)،، 8) إذا كان (بيند (سيرفيرد، (ستروكت سوكادر) أمبرفيرادر، سيزوف (سيرفيرادر)) -1) بيرور سيد: لا يمكن ربط ميناء) الخروج (1) إذا (الاستماع (سيرفيرفد، باكيتكيو) -1) لكل رور (سيرفر سيد: لا يمكن الاستماع إلى مأخذ) إكسيت (1) ميمسيت (ريمسغ، 0x0، 3072) بينما (1) برينتف (هل تريد المتابعة (ين)) السؤال جيتشار () إذا (سؤال) السؤال جيتشار () إف (سؤال N السؤال n) ريتورن 0 برينتف (سيرفر سيد: في انتظار البيانات على المنفذ) لين سيزوف (كلينتادر) كلينتفد قبول (سيرفيرفد، (سوكدر) أمبكلينتادر، أمبلن) إذا (كلينتفد -1) بيرور (سيرفر سيد: الاتصال) إرور برينتف (سيرفر سيد: تم تلقي الاتصال من: s، إينيتنتو (clientaddr. sinaddr)) مسغزيز ريادلين (ريسمسغ، كلينتفد، كلينتادر) إذا (مسغزيز إرور) برينتف (سيرفر سيد: لا يمكن قراءة الرسالة) كوتلتلتيس هو حجم الرسالة : لتلتمسغسيزلتلتندل فوريت (ريسمسغ، سيزوف (إنت)، 10، مايك) ل (j0 jlt10 j) برينتف (- c، ريسمسغي) كلوسيسوكيت (كلينتفد) إذا (وساكلانوب () -1) بيرور (المشكلة مع وساكلينوب) إنهاء ( 1) إنت ريادلين (أونسيغند شار بوف، سوكيت سد، سوكادرين كلينتادر) شار سيغماكسداتا إنت إزاحة 0 إنت ريس 1 إنت كليلن ميمسيت (سيغ، 0x0، ماكسداتا) كليل (سوكتيرور) إذا كان (ريسوفريزوسايكونريسيتروسوسكونابورتيد) 0 الطرف الآخر إنهاء كونتيفت (العميل إنهاء الاتصال) عودة أوفست ميمكبي (بوفوفسيت، سيغ، ريس) أوفست ريس ميمسيت (سيغ، 0x0، ماكسداتا) ريتورن إرور كود: سوكدغرام لا يعني البيانات الثنائية. وهذا يعني أنك تريد استخدام بروتوكول أودب لإرسال البيانات ويتم إرسال البيانات في داتاغرامز. سوكستريم يعني أنك تريد استخدام بروتوكول تكب وإرسال البيانات كتدفق. :: المقبس لا يهتم نوع البيانات التي ترسلها. كل ما تحتاجه هو مؤشر إلى المخزن المؤقت الذي يحمل البيانات وطول هذا المخزن المؤقت. :: صفر داخل البيانات لا يعني أي شيء، فقط صفر. لا يتم إنهاء البيانات بالصفر كما C - سلاسل هي. المقبس لا يهتم محتوى البيانات. :: أعتقد أن هناك شيئا خاطئا تتلقى رمز. ربما كنت تستخدم الصفر كما المنهي هناك، وهو أمر سيء للغاية. إذا كنت يمكن أن ترسل التعليمات البرمجية التي تتلقى البيانات هنا أنا يمكن أن تحاول معرفة ما الخطأ في ذلك. : مقدمة إلى برمجة مقبس ويندوز مع C ماذا لدينا في هذا الفصل 1 الجزء 4 نقل البيانات إرسال () و وساسند () وساسندسكونكت () البيانات خارج النطاق ريكف () و وساريكف () وساريكفديسكونكت () بروتوكولات البث مبعثر - Gather إو كسر إغلاق الاتصال () كلوسيسوكيت () ريسيفرزيرت تكب مع تحديد () مثال نقل البيانات إرسال () و وساسند () وساسندسكونكت () خارج النطاق البيانات ريكف () و وساريكف () عند حدوث أحد الأحداث التالية: المخزن المؤقت الذي يوفره المتصل كامل تماما. تم إغلاق الاتصال. تم إلغاء الطلب أو حدث خطأ. لاحظ أنه إذا كان النقل الأساسي لا يدعم مسغويتال، أو إذا كان المقبس في وضع غير حظر، ثم تفشل هذه المكالمة مع وسيأوبنوتسوب. أيضا، إذا تم تحديد مسغويتال جنبا إلى جنب مع مسغوب أو مسغبيك أو مسغبارتيال، ثم تفشل هذه الدعوة مع وسأوبنوتسوب. لا يتم دعم هذه العلامة على مآخذ مخطط البيانات أو مقابس كو الموجهة نحو الرسائل. بطبيعة الحال، 0 يحدد أي إجراءات خاصة. مسغبيك يؤدي إلى البيانات التي يتم نسخها إلى المخزن مؤقت استقبال الموردة. ولكن لا تتم إزالة هذه البيانات من المخزن المؤقت الأنظمة. يتم أيضا إرجاع عدد وحدات البايت المعلقة. رسالة خاطفة سيئة. ليس فقط أنها لا تتحلل الأداء، كما تحتاج الآن لإجراء استدعاءات نظام اثنين (واحد إلى نظرة خاطفة واحدة دون علم مسغبيك لإزالة فعلا البيانات)، ولكن أيضا لا يمكن الاعتماد عليها في ظل ظروف معينة. قد لا تعكس البيانات التي تم إرجاعها كامل المبلغ المتاح. أيضا، من خلال ترك البيانات في المخازن النظام، النظام لديه مساحة أقل لاحتواء البيانات الواردة. ونتيجة لذلك، يقلل النظام من حجم نافذة تكب لجميع المرسلين. هذا يمنع التطبيق الخاص بك من تحقيق أقصى قدر ممكن من الإنتاجية. أفضل شيء يجب القيام به هو نسخ كافة البيانات التي يمكنك في المخزن المؤقت الخاص بك والتلاعب بها هناك. هناك بعض الاعتبارات عند استخدام ريكف () على مأخذ يستند إلى بيانات - أو مخطط بيانات مثل أودب، والذي سنصفه لاحقا. إذا كانت البيانات المعلقة أكبر من المخزن المؤقت الموفر، يتم تعبئة المخزن المؤقت مع الكثير من البيانات كما سيحتوي. في هذه الحالة، نداء ريكف () بإنشاء خطأ وسيمززيز. لاحظ أن خطأ حجم الرسالة يحدث مع بروتوكولات موجهة للرسائل. بروتوكولات تيار مثل البيانات المؤقتة المخزن المؤقت تكب وسوف ترجع الكثير من البيانات مثل طلبات التطبيق، حتى لو كان كمية البيانات المعلقة أكبر. وهكذا، لبروتوكولات تدفق أنك لن تواجه خطأ وسيمززيز. تقوم الدالة وساريكف () بإضافة بعض الإمكانات الجديدة على ريكف ()، مثل إو المتداخل وإشعارات مخطط البيانات الجزئي. تعريف وساريكف () هو: المعلمة s هي مأخذ توصيل. المعلمات الثانية والثالثة هي المخازن المؤقتة لاستقبال البيانات. المعلمة لبوفرس عبارة عن صفيف من هياكل وسابوف و دوبوفركونت يشير إلى عدد هياكل وسابوف في الصفيف. تشير المعلمة لنومبيروفبيتسرفيسد إلى عدد وحدات البايت التي تم تلقيها بواسطة هذه المكالمة إذا استكملت عملية الاستلام فورا. يمكن أن تكون المعلمة لفلاغس إحدى القيم مسغبيك أو مسغوب أو مسغبارتيال أو توليفة أور بيتية من تلك القيم. علم مسغارتيال له عدة معاني مختلفة اعتمادا على حيث يتم استخدامه أو واجهتها. بالنسبة للبروتوكولات الموجهة للرسائل التي تدعم الرسائل الجزئية (مثل أبليتالك)، يتم تعيين هذه العلامة عند العودة من وساريكف () (إذا تعذر إعادة الرسالة بأكملها في هذه المكالمة بسبب عدم وجود مساحة تخزين كافية). في هذه الحالة، استدعاءات وساريكف () التالية تعيين هذه العلامة حتى يتم إرجاع الرسالة بأكملها عندما يتم مسح علامة مسغارتيال. إذا تم تمرير هذه العلامة كمعلمة إدخال، يجب أن تكتمل عملية الاستلام بمجرد توفر البيانات، حتى لو كانت جزءا فقط من الرسالة بأكملها. يتم استخدام العلم مسغارتيال فقط مع بروتوكولات موجهة نحو الرسائل، وليس مع تدفق منها. وبالإضافة إلى ذلك، لا تدعم جميع البروتوكولات رسائل جزئية. يحتوي إدخال البروتوكول لكل بروتوكول علامة تشير إلى ما إذا كان يدعم هذه الميزة. يتم استخدام معلمات لبوفيرلابد و لبكومبليتيونروتين في عمليات إو المتراكبة، التي تمت مناقشتها في فصل آخر. هناك وظيفة استقبال متخصصة أخرى يجب أن تكون على علم بها: وساريكفديسكونكت (). وساريكفديسكونكت () هذه الدالة هي عكس وساسنديسكونكت () وتعرف كما يلي: إنت وساريكفديسكونكت (سوكيت s، لبوسابوف لبينبونديسكونكتداتا) مثل معلمات الإرسال الخاصة بها، تكون معلمات وساسنديسكونكت () مقبض المقبس المتصل وهيكل وسابوف صالح مع البيانات التي سيتم تلقيها. يمكن أن تكون البيانات الواردة فقط قطع البيانات التي يتم إرسالها من قبل وساسندسكونكت () على الجانب الآخر لا يمكن استخدامها لتلقي البيانات العادية. بالإضافة إلى ذلك، بمجرد استلام البيانات، تعطيل هذه الوظيفة استقبال من الطرف البعيد، وهو ما يعادل استدعاء دالة إيقاف التشغيل () التي تم وصفها لاحقا) مع سدريسيف. بروتوكولات ستريم لأن معظم الاتصالات الموجهة نحو الاتصال، مثل تكب، هي بروتوكولات متدفقة، كما تصفها بإيجاز هنا. والبروتوكول المتدفق هو بروتوكول يمكن للمرسل والمستقبل أن يفسر أو يدمج البيانات في مجموعات أصغر أو أكبر. يوضح الشكل التالي بإيجاز تدفق حزمة تكب بين جانبي العميل والخادم. والشيء الرئيسي الذي يجب أن يكون على بينة من أي وظيفة التي ترسل أو تتلقى البيانات على مأخذ تيار هو أنك غير مضمونة لقراءة أو كتابة كمية البيانات التي تطلبها. دعونا نقول لديك العازلة حرف مع 2048 بايت من البيانات التي تريد إرسالها مع وظيفة الإرسال. التعليمات البرمجية لإرسال هذا هو: إنت نبيتس 2048 ملء سندب مع 2048 بايت من البيانات افترض s هو صالح، متصل توصيل تيار مأخذ إرسال إرسال (ق، سندبوف، نبيتس، 0) فمن الممكن لإرسال العودة بعد أن أرسلت أقل من 2048 بايت . سيتم تعيين متغير ريت على عدد وحدات البايت المرسلة لأن النظام يخصص كمية معينة من مساحة المخزن المؤقت لكل مأخذ لإرسال واستقبال البيانات. في حالة إرسال البيانات، تقوم المخازن المؤقتة الداخلية بإرسال البيانات المراد إرسالها إلى أن يتم وضع البيانات على السلك. العديد من الحالات الشائعة يمكن أن يسبب هذا. على سبيل المثال، ببساطة إرسال كمية كبيرة من البيانات سوف يسبب هذه المخازن المؤقتة ليصبح شغلها بسرعة. أيضا، ل تكبيب، هناك ما يعرف باسم حجم النافذة (انزلاق نافذة تجريبي). سيقوم الطرف المتلقي بتعديل حجم النافذة هذا للإشارة إلى مقدار البيانات التي يمكن أن يتلقاها. إذا تم غمر المستقبل مع البيانات، فإنه قد تعيين حجم النافذة إلى 0 للحاق بركب البيانات المعلقة. سيؤدي هذا إلى إجبار المرسل على التوقف حتى يتلقى حجم نافذة جديد أكبر من 0. في حالة إجراء مكالمة إرسال، قد يكون هناك مساحة عازلة لعقد 1024 بايت فقط، وفي هذه الحالة يجب إعادة إرسال بايت 1024 المتبقية. التعليمات البرمجية التالية تضمن أن يتم إرسال كافة وحدات البايت الخاصة بك: إنت نبيتس 2048، نلفت، إدكس ملء سندب مع 2048 بايت من البيانات أثناء (نليفت غ 0) افترض s هو صالح، مأخذ تيار متصل الأمور تصبح معقدة قليلا إذا أحجام الرسائل تختلف . فمن الضروري لفرض بروتوكول الخاصة بك للسماح للمتلقي معرفة كيف كبيرة ستكون الرسالة القادمة. على سبيل المثال، البايتات الأربعة الأولى المكتوبة إلى المستقبل ستكون دائما الحجم الصحيح في بايت للرسالة القادمة. وسيبدأ جهاز الاستقبال كل قراءة من خلال النظر إلى وحدات البايت الأربعة الأولى، وتحويلها إلى عدد صحيح، وتحديد عدد وحدات البايت الإضافية التي تتضمنها الرسالة. مبعثر جمع إو مبعثر جمع الدعم هو مفهوم قدم أصلا في بيركلي مآخذ مع وظائف ريكف و وريتينف. تتوفر هذه الميزة مع وظائف وينسوك 2 وساريكف () و وساريكفروم () و وساسند () و وساسندتو (). هو الأكثر فائدة للتطبيقات التي ترسل واستقبال البيانات التي يتم تنسيقها بطريقة محددة جدا. على سبيل المثال، قد تتكون الرسائل من عميل إلى خادم دوما من رأس ثابت 32 بايت يحدد بعض العمليات، متبوعا بكتلة بيانات 64 بايت وتنتهي بمقطورة 16 بايت. في هذا المثال، يمكن استدعاء وساسند () بمصفوفة مكونة من ثلاث هياكل وسابوف، كل منها يتوافق مع أنواع الرسائل الثلاثة. على الطرف المتلقي، يتم استدعاء وساريكف () مع ثلاث هياكل وسابوف، تحتوي كل منها على مخازن بيانات 32 بايت و 64 بايت و 16 بايت. عند استخدام المقابس المستندة إلى تيار، عمليات جمع مبعثر ببساطة التعامل مع مخازن البيانات الموردة في هياكل وسابوف كمخزن مؤقت واحد متجاورة. أيضا، قد تلقي مكالمة استقبال قبل كل المخازن المؤقتة مليئة. على مآخذ تستند إلى الرسائل، كل مكالمة إلى عملية استقبال يتلقى رسالة واحدة تصل إلى حجم المخزن المؤقت الموردة. إذا كان مساحة المخزن المؤقت غير كافية، فشل الاتصال مع وسيمزغزيز ويتم اقتطاع البيانات لتناسب المساحة المتوفرة. وبطبيعة الحال، مع البروتوكولات التي تدعم رسائل جزئية، يمكن استخدام علم مسغارتيال لمنع فقدان البيانات. كسر الاتصال بمجرد الانتهاء من اتصال مأخذ، يجب إغلاقه وإطلاق أي الموارد المرتبطة مقبض المقبس. لإطلاق الموارد المرتبطة بمقبس مأخذ مفتوح فعليا، استخدم استدعاء كلوسيسوكيت (). ومع ذلك، يجب أن يكون على علم بأن كلوسيلوكيت () يمكن أن يكون لها بعض الآثار السلبية، اعتمادا على كيف يتم استدعاؤه، التي يمكن أن تؤدي إلى فقدان البيانات. لهذا السبب، يجب إنهاء اتصال بأمان مع وظيفة إيقاف التشغيل () قبل استدعاء دالة كلوسيسوكيت (). وتناقش هاتان الوظيفتان أبي بعد ذلك. إيقاف التشغيل () لضمان استلام جميع البيانات التي يرسلها التطبيق من قبل النظير، ينبغي أن يخطر الطلب المكتوب جيدا المتلقي بأنه لن يتم إرسال المزيد من البيانات. وبالمثل، يجب على الأقران أن يفعل الشيء نفسه. ويعرف هذا باسم إغلاق رشيقة ويتم تنفيذها من قبل وظيفة اغلاق ()، وتعرف على النحو التالي: إنت اغلاق (سوكيت ق، إنت كيف) كيف يمكن أن تكون المعلمة سدريسيف، سدزيند، أو سدبوث. وبالنسبة إلى سدريسيف، لا يسمح بالنداءات اللاحقة إلى أي وظيفة استقبال على المقبس. وهذا ليس له أي تأثير على طبقات البروتوكول الأدنى. وبالنسبة لمآخذ تكب، إذا كانت البيانات في قائمة الانتظار لتلقيها أو إذا وصلت البيانات لاحقا، يتم إعادة تعيين الاتصال. ومع ذلك، على مقبس أودب البيانات الواردة لا تزال مقبولة وقائمة الانتظار (لأن الاغلاق () ليس له معنى للبروتوكولات دون اتصال). وبالنسبة إلى سدزيند، لا يسمح بالنداءات اللاحقة إلى أي وظيفة إرسال. بالنسبة لمآخذ تكب، يؤدي هذا إلى إنشاء حزمة فين بعد إرسال جميع البيانات وإقرارها من قبل جهاز الاستقبال. وأخيرا، تحديد سدبوث تعطيل كل من يرسل ويتلقى. لاحظ أن ليس كل البروتوكولات الموجهة نحو الاتصال تدعم إغلاق رشيقة، وهو ما يقوم به اغلاق () أبي. لهذه البروتوكولات (مثل أتم)، كلوسيسوكيت فقط () يحتاج إلى أن يسمى لإنهاء الدورة. ويرد في الجدول التالي ملخص للعلم الذي يصف أنواع العمليات. يتم سرد القيم المحتملة لهذه العلامة في ملف رأس Winsock2.h. بمجرد أن يتم استدعاء دالة إيقاف التشغيل () لتعطيل إرسال أو استقبال أو كليهما، لا توجد طريقة لإعادة تمكين إرسال أو استقبال اتصال مأخذ موجود. يجب ألا يعتمد التطبيق على القدرة على إعادة استخدام المقبس بعد إغلاقه. على وجه الخصوص، لا يلزم موفر ويندوز سوكيتس لدعم استخدام الاتصال () على مأخذ تم إيقاف تشغيله. إذا كان أحد التطبيقات يريد إعادة استخدام مأخذ توصيل، يجب استدعاء الدالة ديسكونكتكس () مع مجموعة المعلمات دوفلاغس إلى تفروسيسكيت لإغلاق اتصال على مأخذ وتحضير مقبض المقبس لإعادة استخدامها. عند اكتمال طلب ديسكونكتكس ()، يمكن تمرير مقبض المقبس إلى الدالة أسيبتكس () أو كونكتيكس (). إذا كان أحد التطبيقات يريد إعادة استخدام مأخذ توصيل، يمكن استدعاء الدالة ترانزميتفيل () أو ترانزميتباكيتس () مع مجموعة المعلمات دوفلاغس مع تفديسكونكت و تفريوسيسكيت لقطع الاتصال بعد وضع كافة البيانات في قائمة الانتظار للإرسال وإعداد المقبس المقبض لإعادة استخدامها. عند اكتمال طلب ترانزميتفيل ()، يمكن تمرير مقبض المقبس إلى استدعاء الدالة المستخدمة سابقا لإنشاء الاتصال، مثل أكسيبتكس () أو كونكتيكس (). عند اكتمال الدالة ترانزميتباكيتس ()، يمكن تمرير مقبض المقبس إلى الدالة أسيبتكس (). لاحظ أن فصل مستوى المقبس يخضع لسلوك النقل الأساسي. على سبيل المثال، قد يكون مقبس تكب خاضعا لحالة تكب تيموييت، مما يتسبب في تأخير الاتصال ديسكونكتكس () أو ترانزميتفيل () أو ترانزميتباكيتس (). كلوسيسوكيت () إغلاق الدالة كلوسيسوكيت () مأخذ توصيل وتعرف على النحو التالي: إنت كلوسيسوكيت (سوكيت s) في حالة حدوث أي خطأ، إرجاع كلوسيسوكيت () الصفر. وإلا، يتم إرجاع قيمة سوكيتيرور، ورمز خطأ معين يمكن استرجاعها عن طريق استدعاء وساجيتلاستيرور (). يتم وضع علامة على مأخذ كما غير مقيد، ولكن يتم تعيين العضو لونوف من هيكل معلقة إلى غير الصفر ويتم تعيين عضو اللينغر من هيكل معلقة إلى قيمة مهلة غير صفرية. يؤدي دالة كلوسيسوكيت () إلى تحرير واصف المقبس وأي مكالمات أخرى باستخدام المقبس تفشل مع وسينوتسك. إذا لم تكن هناك إشارات أخرى إلى هذا المقبس، يتم تحرير كافة الموارد المرتبطة بالوصف. وهذا يتضمن استبعاد أي بيانات في قائمة الانتظار. في انتظار إلغاء المكالمات المتزامنة الصادرة عن أي مؤشر ترابط في هذه العملية دون نشر أية رسائل إعلام. كما يتم إلغاء العمليات المتداخلة المعلقة. يتم تنفيذ أي حدث أو روتين إنجاز أو منفذ إكمال المقترن مع العملية المتراكبة ولكن سوف تفشل مع الخطأ وسوبيراتيونابورتيد. وبالإضافة إلى ذلك، عامل واحد آخر يؤثر على سلوك كلوسلوكيت (): ما إذا كان قد تم تعيين خيار مأخذ سولينغر. يجب أن يكون التطبيق دائما مكالمة مطابقة إلى كلوسيسوكيت () لكل مكالمة ناجحة إلى مأخذ لإعادة أي موارد مأخذ للنظام. تكب ريسيفر سيرفر مع تحديد () مثال 1. أثناء في إيد فيسوال C، انقر فوق القائمة ملف غ القائمة الفرعية المشروع لإنشاء مشروع جديد. 2. حدد Win32 لأنواع بروجيكت: وتطبيق وحدة تحكم Win32 للقوالب. ضع اسم المشروع والحل. اضبط موقع المشروع إذا لزم الأمر وانقر على موافق. 3. انقر فوق التالي لصفحة نظرة عامة على معالج التطبيق Win32. سنقوم بإزالة كافة عناصر المشروع غير الضرورية. 4. في صفحة التطبيق، حدد المشروع الفارغ للخيارات الإضافية. اترك الآخرين كما هو محدد وانقر فوق إنهاء. 5. بعد ذلك، نحن بحاجة إلى إضافة ملف مصدر جديد. انقر فوق قائمة بروجيكت غ إضافة عنصر فرعي جديد أو حدد مجلد المشروع في مستكشف الحلول غ حدد إضافة قائمة غ حدد قائمة فرعية جديدة. .6 حدد ملف C (.cpp) للقوالب. ضع اسم الملف المصدر وانقر على إضافة. على الرغم من أن التمديد هو. cpp، سيعترف فيسوال C إيد أن التعليمات البرمجية المصدر المستخدمة هي C استنادا إلى خيار ترجمة C (تك) البرمجية التي سيتم تعيينها في صفحة موقع المشروع لاحقا. 7. الآن، إضافة شفرة المصدر كما هو مبين أدناه. عينة من اختيار () قيمة العودة إنت ريكفتيميوتكب (مأخذ مأخذ، ثانية طويلة، أوسيك طويلة)
No comments:
Post a Comment