امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ديسكانت شدن بي دليل يك ارتباط TCP
نویسنده پیام
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #1
Question  ديسكانت شدن بي دليل يك ارتباط TCP
يك ماژول ClientSocket1 توي دلفي دارم كه مستقيم به يك پورت در LocalHost متصل هست
هر اطلاعاتي كه بهش بدم مستقيم Write ميكنه روي اون پورت و هر اطلاعاتي از اون پورت بهش برسه ميفرسته به يك ماژول ديگه و اون ميفرسته به يه جاي ديگه بيرون از كامپيوتر با اين قسمت مشكلي ندارم...
در حالت عادي كه تعداد پكتهاي ارسالي و دريافتي در واحد ثانيه زياد نيست مشكلي ندارم و برنامه به خوبي كار ميكنه
ولي وقتي سرعت نقل و انتقال ميره بالا 20 پكت در ثانيه ( 10 تا ارسال 10 تا دريافت ) يهو از سمت localhost كانكشن ارتباطي با ClientSocket1 ديسكانكت ميشه!
كسي تاحالا به همچين مشكلي برخورد كرده ؟

پيوست : حجم پكت ها به طور معمول كمتر از 10 بايت هست. و حداكثر 160 بايت
پيوست 2: نرم افزاري كه روي localhost هست مشكلي نداره و در حالت معمولي با ارتباطات اورجينال خودش درست كار ميكنه ساعتها......
پيوست 3: تمام پكتهاي ارسالي و دريافتي چك شدند ( دونه به دونه )‌چيزي غير از استراكچر استاندارد قاطيشون نبوده كه بگم اشكال از اينه.
پيوست 4: سرعت cpu نهايتا 2-3 درصدش گرفته ميشه و هميشه آزاده. رم هم همينطور آزاده و جائي به حد پر شدن نميرسند در اين پروسه

چيزي به ذهنتون ميرسه ؟




[تصویر:  sajdelogo.gif]
۲۵-مرداد-۱۳۹۰, ۲۰:۱۱:۳۵
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #2
RE: ديسكانت شدن بي دليل يك ارتباط TCP
از کجا فهمیدی از سمت localhost كانكشن ارتباطي با ClientSocket1 ديسكانكت ميشه‌ ؟
۲۵-مرداد-۱۳۹۰, ۲۰:۲۰:۰۲
وب سایت ارسال‌ها
پاسخ
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #3
RE: ديسكانت شدن بي دليل يك ارتباط TCP
(۲۵-مرداد-۱۳۹۰, ۲۰:۲۰:۰۲)babyy نوشته است: از کجا فهمیدی از سمت localhost كانكشن ارتباطي با ClientSocket1 ديسكانكت ميشه‌ ؟

براي تمام نقاطي كه امكان خطا ميدادن bp تعيين كردم ، اولين نقطه ديسكانتي در سيستم ارتباط لوكال هاست بود با ClientSocket

من هيچ كدي براي ديسكانت شدن ننوشتم پس به صورت معمولي بايد قطعي از اون سمت بياد ، ولي اون سمتlocalhost در حالت معمول ( ارتباط با نرم افزار خودش ) هيچ وقت ديسكانكتي نميده
خب من كه نگفتم ديسكانت كن علت چي ميتونه باشه؟

[تصویر:  sajdelogo.gif]
(آخرین ویرایش در این ارسال: ۲۵-مرداد-۱۳۹۰, ۲۰:۳۲:۴۴، توسط joker.)
۲۵-مرداد-۱۳۹۰, ۲۰:۳۰:۳۴
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #4
RE: ديسكانت شدن بي دليل يك ارتباط TCP
(۲۵-مرداد-۱۳۹۰, ۲۰:۳۰:۳۴)joker نوشته است: براي تمام نقاطي كه امكان خطا ميدادن bp تعيين كردم ، اولين نقطه ديسكانتي در سيستم ارتباط لوكال هاست بود با ClientSocket

من هيچ كدي براي ديسكانت شدن ننوشتم پس به صورت معمولي بايد قطعي از اون سمت بياد

من اینطور متوجه شدم که:
۱ - الا برنامه شما به یه برنامه ی دیگه در localhost ارتباط برقرار کرده
۲ - اون برنامه localhost رو شما ننوشتید ؛ بلکه یه برنامه ی آمادست (مثلا یاهو مسنجر) که شما با ClientSocket پروتوکل هاش رو تقلید کردید و باهاش اطلاعات رو بدل میکنید

اگه حرفام درسته پس شما تو برنامه ی دلفی خودتون bp تعین کردید؟

اگه جواب مثبته ؛ از جمله ی بالا میشه دو نتیجه گرفت :
۱ - همون که شما گفتید (برنامه localhost ارتباط قطع کرده)
۲ - برنامه دلفی خودتون (ClientSocket) به علت زیر بار شدید پکتها دچار اختلال شده و هندل ارتباطش با localhost از بین رفته ! در نتیجه تو اون bp تعیین شده هم خطا داده !
۲۵-مرداد-۱۳۹۰, ۲۱:۲۷:۰۹
وب سایت ارسال‌ها
پاسخ
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #5
RE: ديسكانت شدن بي دليل يك ارتباط TCP
خب ، ادامه اش برام مهمه :)
رفع مشكل؟

[تصویر:  sajdelogo.gif]
۲۵-مرداد-۱۳۹۰, ۲۱:۲۹:۳۷
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #6
RE: ديسكانت شدن بي دليل يك ارتباط TCP
هنوز مطمءن نیستی مشکل از کجاست چی رفع مشکلی کنییم ؟ :)
اگه حرفای بالا درست باشه ؛ خب ماجول ClientSocket بد برنامه نویسی شده ؛
معمولا واسه اینکه برنامه تو اینجور مواقع قاط نزنه بجای اینکه مستقیم پردازش بشه اطلاعات اول میریزنش تو یه پشته
۲۵-مرداد-۱۳۹۰, ۲۲:۱۸:۵۳
وب سایت ارسال‌ها
پاسخ
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #7
RE: ديسكانت شدن بي دليل يك ارتباط TCP
البته اينم حدس زدم ، براي همين يك ServerSocket خودم درست كردم و ارتباط را انتقال دادم به اون و 10هزارتا پكت بدون يك لحظه وقفه به صورت ممتد و رندوم بهش ارسال كردم ، بدون هيچ مشكلي دريافت و ارسال داشت.
ClientSocket استاندارد خود بورلنده! بد برنامه نويسي نشده :))

[تصویر:  sajdelogo.gif]
(آخرین ویرایش در این ارسال: ۲۶-مرداد-۱۳۹۰, ۰۰:۲۷:۳۱، توسط joker.)
۲۶-مرداد-۱۳۹۰, ۰۰:۱۹:۵۴
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #8
RE: ديسكانت شدن بي دليل يك ارتباط TCP
از حرفای بالانتیجه میگیریم :
ClientSocket که کارش درسته
برنامه localhost هم که درست کار میکنه با برنامه خودش
پروتکل های tcp/ip که درست طراحی شدن

۱ - این وسط فقط برنامه خودت میمونه ؛
۲- و احتمال اینکه اون برنامه localhost تو سرعت زیاد قاط میزنه ؛

اگه گزینه دوم غلط باشه و قاط نمیزنه تو این سرعت ؛ حتما یجای کار خودت مشکل داره
۲۶-مرداد-۱۳۹۰, ۰۲:۰۵:۲۸
وب سایت ارسال‌ها
پاسخ
CRazYFULL غایب
مدیر بازنشسته
*****

ارسال‌ها: 792
موضوع‌ها: 27
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #9
RE: ديسكانت شدن بي دليل يك ارتباط TCP
بيشتر سرور ها اگه پکتی غير از پکت پروتکل خودشون رو دريافت کنن يا قسمتی از پکت رو نتونن درک کنن کلاينت رو ميبندن
بعضی اوقات که دو يا چندين پکت رو تو بازه زمانی کمی ارسال کنيد امکان داره در قالب يه پکت ارسال و و از سرور دريافت بشه

اين راه رو تست کن شايد جواب بده:
تمام پکت های دريافتی رو تو يه ليست بريزيد (توی برنامه اي که با سرور در ارتباط هست) و بعد تو يه تريد ديگه با وقفه کم پکت ها رو به ترتيب به سرور ارسال کنيد
(آخرین ویرایش در این ارسال: ۲۶-مرداد-۱۳۹۰, ۱۱:۵۰:۳۵، توسط CRazYFULL.)
۲۶-مرداد-۱۳۹۰, ۱۱:۴۸:۱۸
ارسال‌ها
پاسخ
تشکر شده توسط : joker
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #10
RE: ديسكانت شدن بي دليل يك ارتباط TCP
براي پكتها در انتهاي هركدوم يك crc گذاشتم _ حواسم هست كه موقع تحويل به برنامه برش بدارم_
پكتهاي غير استانداردي نميان يعني همه سالم ،
پكتهاي دريافتي هم با انواع مدلهاي وقفه به سمت سرور ارسال شدند
ولي ولي ولي ليست كردنشون قسمت بد ماجرا همينه " پكت لاست "شدن پروتكل UDP هست

يعني احتمال ميدم وقتي سرور يك درخواست خاص ميفرسته ، كلاينت داره يه جواب ديگهاز قبل را بهش ميده ، يا جواب همون موقع نميرسه ، يا جا مي افته با يك جواب ديگه جايگزين ميشه و به همين دليل سرور ميبينه كه جواب صحيح نيست ، ريجكت ميكنه

يه راه حل پيشنهاد بدين.

[تصویر:  sajdelogo.gif]
(آخرین ویرایش در این ارسال: ۲۶-مرداد-۱۳۹۰, ۱۵:۱۴:۱۶، توسط joker.)
۲۶-مرداد-۱۳۹۰, ۱۵:۱۲:۴۳
ارسال‌ها
پاسخ
CRazYFULL غایب
مدیر بازنشسته
*****

ارسال‌ها: 792
موضوع‌ها: 27
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #11
RE: ديسكانت شدن بي دليل يك ارتباط TCP
(۲۶-مرداد-۱۳۹۰, ۱۵:۱۲:۴۳)joker نوشته است: يعني احتمال ميدم وقتي سرور يك درخواست خاص ميفرسته ، كلاينت داره يه جواب ديگهاز قبل را بهش ميده ، يا جواب همون موقع نميرسه ، يا جا مي افته با يك جواب ديگه جايگزين ميشه و به همين دليل سرور ميبينه كه جواب صحيح نيست ، ريجكت ميكنه

يه راه حل پيشنهاد بدين.

اينطور که ميگی يعنی وقتی سرور منتظر يه نوع پکت هست يه نوع ديگه دريافت ميکنه و کلاينت رو ميبنده
پس بايد قبل از ارسال شدن نوع پکت ها رو مشخص کنی و بدونی چه زمانی چه پکتی بايد ارسال بشه يا چه نوع پکت های ميتونن ارسال بشن

به نظرم يه کلاس کامل برای کار با پروتکل اون سرور بنويس بعد به جای arry کردن سوکت ها اون کلاس رو arry کن

اينطوری هم از به هم ريختگی ديتا تا حد زيادی جلوگيری ميشه و هم اگه بعداً هر تغييری خواستی انجام بدی رو همون يه کلاس انجام ميدی و منظم تر ميشه

از TCP استفاده کرده بودی اينهمه دردسر نداشتی


۲۶-مرداد-۱۳۹۰, ۱۹:۴۴:۴۸
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ایجاد امنیت و برقراری ارتباط با SQL Server (در دلفی) Pr0grammer 0 4,210 ۲۰-تير-۱۳۸۹, ۱۱:۱۰:۲۷
آخرین ارسال: Pr0grammer
Rolleyes ارتباط با دیتابیس The.Ghost 1 2,907 ۲۵-اردیبهشت-۱۳۸۹, ۱۱:۰۱:۱۸
آخرین ارسال: lord_viper
Rolleyes ارتباط به اینترنت The.Ghost 1 2,754 ۲۲-اردیبهشت-۱۳۸۹, ۲۳:۲۴:۳۰
آخرین ارسال: lord_viper
  تشخیص ارتباط کامپیوتر ها در شبکه ؟ Majid_Ebru 6 5,519 ۱۸-اردیبهشت-۱۳۸۹, ۱۲:۵۲:۰۳
آخرین ارسال: The.Ghost
  ارتباط با پورت سریال : The.Ghost 2 5,015 ۱۰-بهمن-۱۳۸۸, ۱۰:۴۰:۳۲
آخرین ارسال: lord_viper
Question ارتباط دلفی با دیتابیسی که آپلود شده است؟ The.Ghost 3 5,026 ۱۴-آذر-۱۳۸۸, ۱۸:۱۱:۴۴
آخرین ارسال: lord_viper
  لطفا راجع ارتباط با com port ها ... s_mostafa_h 5 7,288 ۲۳-مرداد-۱۳۸۸, ۱۵:۰۲:۴۱
آخرین ارسال: ahp_online
  كمك : در زمینه ارتباط دلفی با سخت افزار hamed_mp 11 13,305 ۱۴-اسفند-۱۳۸۷, ۱۲:۱۳:۱۲
آخرین ارسال: llena abbaszadeh
  ارتباط با پورت کام peymantrojan 10 12,200 ۲۰-دى-۱۳۸۷, ۰۰:۲۳:۲۷
آخرین ارسال: sita_rampail

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS