PDA

View Full Version : چندین ارتباط با یک Winsock



M.T.P
شنبه 08 اسفند 1388, 11:12 صبح
با سلام خدمت اساتید:
سوالم اینه که من واسه ارتباط 12 سیستم تو شبکه 12 تا winsock گذاشتم ، میخواسنم بدونم با یک winsock میشه با چند سیستم دیگه ارتباط برقرار کرد یا نه؟:متفکر:
ار طریق استفاده از توابع winsock.dll چی؟:متفکر:

daniyal_1363
سه شنبه 11 اسفند 1388, 17:15 عصر
سلام دوست عزیز
با یه Winsock نمیشه چندین ازتباط بر قرار کرد ولی میشه فقط یک Winsock به برنامه وارد کرد و از روی این Winsock به اندازه نیاز ( همون تعداد درخواست اتصال Client به Sever) در حال اجرا Winsock ساخت که دوتا مزیت داره :
1- شاید همیشه تمامی سیستم ها روشن نباشند تا بخوان به سرور وصل بشن پس از 12تا Winsock که داری یه تعدادیش بلااستفاده میمونه
2 - winsockهات در حین اجرای نرم افزار لود میشن و در زمان طراحی سرت از لحاظ Winsock خلوته.

اگه خواستی بگو تا بگم چه کنی :چشمک:

M.T.P
سه شنبه 11 اسفند 1388, 18:24 عصر
سلام دوست عزیز
با یه Winsock نمیشه چندین ازتباط بر قرار کرد ولی میشه فقط یک Winsock به برنامه وارد کرد و از روی این Winsock به اندازه نیاز ( همون تعداد درخواست اتصال Client به Sever) در حال اجرا Winsock ساخت که دوتا مزیت داره :
1- شاید همیشه تمامی سیستم ها روشن نباشند تا بخوان به سرور وصل بشن پس از 12تا Winsock که داری یه تعدادیش بلااستفاده میمونه
2 - winsockهات در حین اجرای نرم افزار لود میشن و در زمان طراحی سرت از لحاظ Winsock خلوته.

اگه خواستی بگو تا بگم چه کنی :چشمک:

با تشکر از دانیال عزیز...:تشویق:
ساخت آرایه از کنترل رو بلدم ، ارتباط از طریق winsock.dll رو بلدی؟:متفکر:به نظرت با اون امکان پذیره؟(بدون استفاده از کنترل winsock)؟:متفکر:

daniyal_1363
دوشنبه 24 اسفند 1388, 19:05 عصر
winsock.dll ؟ راستش چیزی نمیدونم ولی تا حالا هر کاری خواستم با کنترل Winsock انجام دادم ، شاید منظورت نفهمیدم:متفکر:

crazyfull
شنبه 11 اردیبهشت 1389, 03:56 صبح
برای اينکه بتونی مالتی سوکت داشته باشی بايد از دو تا وينساک تو سرور استفاده کنی که يکی از سوکت ها ليستن ميکنه و زمانی که با درخواست کانکت روبرو شد requestId رو با سوکت دومی اکسپت ميکنيد

مثال:


Private Sub Winsock2_ConnectionRequest(ByVal ReQuestID As Long)
SockIndex = SockIndex + 1
Load Winsock1(SockIndex)
'Winsock1(SockIndex).Close
Winsock1(SockIndex).Accebt ReQuestID
End Subسوکت دومی هم بايد به صورت مالتی باشه

M.T.P
شنبه 18 اردیبهشت 1389, 11:32 صبح
برای اينکه بتونی مالتی سوکت داشته باشی بايد از دو تا وينساک تو سرور استفاده کنی که يکی از سوکت ها ليستن ميکنه و زمانی که با درخواست کانکت روبرو شد requestId رو با سوکت دومی اکسپت ميکنيد

مثال:


Private Sub Winsock2_ConnectionRequest(ByVal ReQuestID As Long)
SockIndex = SockIndex + 1
Load Winsock1(SockIndex)
'Winsock1(SockIndex).Close
Winsock1(SockIndex).Accebt ReQuestID
End Subسوکت دومی هم بايد به صورت مالتی باشه

با تشکر فراوان...:تشویق:
این کد خیلی عالیه!! در واقع با استفاده از یک پورت میتونیم هر چندتا Connection که بخوایم رو بپذیریم ، من قبلا یه همچین کدی رو یه جا دیدم منتها بدیی که داشت این بود که بعد از Load کردن یه Winsock جدید پورت اون رو هم بعلاوه یک میکرد که اصلا به دردم نخورد چون بعضی مواقع هست که پورت بعدی ممکنه اشغال باشه و تضمینی برای بعلاوه یک کردن پورت نیست. و بدتر از همه اینکه کلاینت ها رو مجبور به اتصال به پورت های بعدی میکردم و اصلا:متعجب: ولش کن
حالا دوست عزیز من تو رویداد Error و Close کنترل Winsock در واقع کنترلی که به این وضع درمیاد رو بلافاصله تو همین رویدادها Unload میکنم و دیگه مطمئنم که فقط Winsock های کانکت شده دارم.
بازهم تشکر میکنم واقعا جای تقدیر داره:قلب:

daniyal_1363
شنبه 19 تیر 1389, 11:32 صبح
برای اينکه بتونی مالتی سوکت داشته باشی بايد از دو تا وينساک تو سرور استفاده کنی که يکی از سوکت ها ليستن ميکنه و زمانی که با درخواست کانکت روبرو شد requestId رو با سوکت دومی اکسپت ميکنيد

مثال:


Private Sub Winsock2_ConnectionRequest(ByVal ReQuestID As Long)
SockIndex = SockIndex + 1
Load Winsock1(SockIndex)
'Winsock1(SockIndex).Close
Winsock1(SockIndex).Accebt ReQuestID
End Subسوکت دومی هم بايد به صورت مالتی باشه


سلام

این کد مگه همون آرایه سازی از Winsock نیست (به ازای هر درخواست ساخت یک Winsock ) ؟ یا اینکه از طریق یک پورت که Listen میکنم چندین ارتباط داره ؟ کدوم یکی ؟

اگه دومیه ،میشه توضیح کامل بدین چطوری از طریق یه یا 2 پورت چندین اتصال داشته باشیم ؟

راهی که بقول دوستمون پورت های خالی رو بعلاوه یک نکنیم که در این بین شاید یه پورت پر شده باشه و مشکل بوجود بیاد؟

FinalMOB
شنبه 19 تیر 1389, 14:10 عصر
سلام

این کد مگه همون آرایه سازی از Winsock نیست (به ازای هر درخواست ساخت یک Winsock ) ؟ یا اینکه از طریق یک پورت که Listen میکنم چندین ارتباط داره ؟ کدوم یکی ؟

اگه دومیه ،میشه توضیح کامل بدین چطوری از طریق یه یا 2 پورت چندین اتصال داشته باشیم ؟

راهی که بقول دوستمون پورت های خالی رو بعلاوه یک نکنیم که در این بین شاید یه پورت پر شده باشه و مشکل بوجود بیاد؟
با عرض سلام خدمت همگي و رخصت از جناب daniyal_1363 عزيز
ببينيد دوست عزيز، شما وقتي يك پورت رو روي سيستم خودت باز مي كني، در همون لحظه نمي توني همون پورت باز كني ولي وقتي اتصال برقرار ميشه، در واقع ابتدا اون پورت بسته ميشه و بعد ارتباط برقرار ميشه و شما بعدش مي تونيد از همون پورت براي ارتباط بعدي استفاده كنيد.

يه مثال ساده مي زنم: باز كردن پورت مثل اينه كه يك كشتي بياد توي اسكله و منتظر يك ناخدا باشه، خوب حالا وقتي ناخدا مياد و ميره تو كشتي و كشتي رو حركت ميده، اون اسكله خالي ميشه. شما اگه به ديكشنري هم مراجعه كنين، پورت رو بندر معني كرده.

موفق و سربلند باشيد. يا حق

crazyfull
دوشنبه 21 تیر 1389, 14:40 عصر
سلام

این کد مگه همون آرایه سازی از Winsock نیست (به ازای هر درخواست ساخت یک Winsock ) ؟ یا اینکه از طریق یک پورت که Listen میکنم چندین ارتباط داره ؟ کدوم یکی ؟

اگه دومیه ،میشه توضیح کامل بدین چطوری از طریق یه یا 2 پورت چندین اتصال داشته باشیم ؟

راهی که بقول دوستمون پورت های خالی رو بعلاوه یک نکنیم که در این بین شاید یه پورت پر شده باشه و مشکل بوجود بیاد؟

بله آرايه سازی از کنترل هست.
يک کنترل Winsock فقط به يک پورت گوش ميده و تنها کار گوش دادن رو انجام ميده و هيچوقت توسط خودش درخواستی رو Accept نميکنه در نتيجه تا زمانی که سوکت رو نبنديم اون پورت باز ميمونه و بهش گوش ميده، زمانی که درخواستی دريافت ميشه يک سوکت از نوع آرايه برای درخواست لود ميشه و درخواست رو Accept ميکنه و ارتباط برقرار ميشه (البته بهتره قبلش چک بشه از ميون سوکت هايی که از قبل لود شده اگه سوکتی close بود با اون سوکت درخواست رو accept کنه)
اگه تعداد درخواست ها زياد هست و يا اينکه ميخواين برنامتون مقداری در مقابل حملات مقاوم باشه بهتر اينه که از قبل به اندازه مورد نياز وينساک لود شده باشه

برای فهم و درک بيشتر اون مثال رو 2 وينساک زدم اما با يک وينساک از نوع آرايه هم ميشه مثلاً ميشه يکی از اعضای آرايه با ايندکس 0 کار گوش دادن رو انجام بده.

fchmmm
پنج شنبه 31 تیر 1389, 16:21 عصر
اگه می شه محبت کنین و منو در نوشتن این برنامه راهنمایی کنین:(به زبان وی بی 6 یا وی بی دات نت)
یک سرور و چندین کلاینت در حال اجرا باشند
یک سرور روی شبکه اجرا میشود.
آدرس ارتباط با سرور (آی پی و پورت ارتباطی) در تمامی کلاینت ها ثبت میگردد.
کلاینت ها اقدام به برقراری ارتباط با سرور میکنند.
اگر کلاینتی به دلیل مشغول بودن سرور موفق به برقراری ارتباط نشد به مدت زمان تصادفی منتظر مانده و مجددا برای برقراری ارتباط اقدام میکند.
هر کلاینتی که موفق به برقراری ارتباط با سرور شد درخواست خود را اعلام میکند
سرور به کلاینت فهرستی از اعداد را برای پردازش اعلام میکند.
کلاینت بلا فاصله پس از دریافت فهرست و اعلام صحت دریافت اطلاعات از سرور جداشده و شروع به پردازش میکند.
پس از اتمام پردازش کلاینت مجددا به سرور متصل شده و پس از اعلام گزارش از اعداد اولی که پیدا کرده است درخواست دریافت فهرست پردازشی جدید را ارسال کرده و این مسیر ادامه میابد
هر کلاینت در لحظه ی ارسال پیام به سرور متصل گردیده، پیام را ارسال و پاسخ را دریافت میکند و بلافاصله از سرور جدا میشود تا ارتباط برای سایر کلاینت ها آزاد شود. به عنوان مثال یک کلاینت به سرور متصل شده و پیام "کلاینت شماره *** آماده" (به جای *** شماره یا نام کلاینت که توسط یک جعبه متن در برنامه تعیین میشود قرار میگیرد) را ارسال میکند. سرور هم در پاسخ پیام "کلاینت *** دریافت شد" را ارسال میکند. و کلاینت پس از دریافت این پیام از سرور جدا میشود.
خواهشاً اگه کسی می دونه منو راهنمایی کنه

hamid20live
سه شنبه 12 مرداد 1389, 22:53 عصر
فکر نکنم یکی جواب بده

hamidhws
دوشنبه 20 دی 1389, 03:35 صبح
بازم فکر کنم زیادی دیر رسیدم :D
دوست عزیز از طریق یک winsock هم میشه اطلاعات ارسال کرد و هم دریافت کرد