سؤال

أحتاج إلى الاتصال بجهاز على الشبكة المحلية، باستخدام اتصال TCP / IP. عندما أستخدم TidTcpclient، كل شيء يعمل بشكل جيد، باستثناء شيء واحد:

إذا كان الاتصال غير متوفر، يستغرق الأمر حوالي 18-20 ثانية قبل أن أحصل على مهلة. لا يوجد لديه أي تأثير، بغض النظر عن القيم التي أقيمها. يستغرق دائما نفس الوقت قبل المهلة.

href="https://stackoverflow.com/questions/4271381/tidhttp-connecttimeout-not-working/4272832#4272832#4272832#4272832#4272832"> هذه الإجابة تذكر أوقات التأخير لفترة طويلة من أجل مهلة أتساءل عما إذا كان هذا يتعلق بمكونات Indy؟

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

هل هناك طريقة للقيام بذلك باستخدام Indy، أو أحتاج إلى استخدام مكونات مختلفة / نهج مختلف؟

(أنا أستخدم إصدار Indy 10 الذي يتم شحنه مع Delphi 2009)

تحرير :
تابعت التعليمات لترقية Indy إلى أحدث إصدار في هذا المنشور .

لا يزال هو نفسه، يستغرق الآن بثبات 22 ثانية حتى يتم إرجاع tcpclient.connect عندما لا يكون هناك اتصال. يبدو أن ConnectTimeout و / أو ReadTimeout ليس له تأثير على هذا.

نصائح أخرى

connecttimeout يعمل بشكل صحيح لعام 2010 و XE.ربما يمكنك تحديث إصدار Indy الخاص بك إلى أحدث (مجاني).لدي وظيفة تقوم بتوصيل "التحقق السريع"، فقط للتحقق من توفر الجهاز وتلك المهلة هي 5 ثوان دون مشاكل (في كل من عام 2010 و XE).

باستخدام مهلة اتصال عميل TCP الافتراضي (غير محدد خصيصا) وقراءة مهلة قراءة واحدة، باستخدام Delphi 2010 وأحدث إصدار Indy، اتصال محلي (باستخدام LocalHost كاسم مضيف) مرات في ثانية واحدة.لذلك ليس بالتأكيد مشكلة دلفي / إندي.راجع للشغل، وهذا يعطيني eidsocketerror ("خطأ مأخذ التوصيل # 10061 يرفض الاتصال").

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top