View Full Version : سوال: قطع یک اتصال (winsock)
hamidhws
شنبه 24 تیر 1391, 03:41 صبح
سلام دوستان
من در سمت سرور 2 تا winsock گذاشتم که یکیش listen میکنه و اون یکی accept ,
و به این صورت هر تعداد کانکشن که بخوام به سرور وصل میکنم . حالا فرض کنید اگه بخوام یکی از این کانکشن ها رو قطع کنم باید چیکار کنم؟ اگر از دستور close استفاده کنم همه کانکشن ها بسته میشن اما من میخوام فقط یکی از کانکشن ها رو قطع کنم
ممنون میشم اگر راهنمایی کنید
با تشکر
program2vb
شنبه 24 تیر 1391, 07:39 صبح
سلام دوست عزیز من زیاد در مورد وب اطلاعات ندارم ... اما میتونی یک دستور تعریف کنی و اون دستور رو به اون کانکشن بفرستی و وقتی کانکشنت اون کد رو دریافت کرد دستور Close رو اجرا کنه و اونو قطع کنه .... موفق و پیروز باشی یا علی .
بازم از بقیه دوستان هم جواب بگیر ... من زیاد در مورد وب اطلاعات ندارم
M.T.P
شنبه 24 تیر 1391, 11:03 صبح
سلام دوستان
من در سمت سرور 2 تا winsock گذاشتم که یکیش listen میکنه و اون یکی accept ,
و به این صورت هر تعداد کانکشن که بخوام به سرور وصل میکنم . حالا فرض کنید اگه بخوام یکی از این کانکشن ها رو قطع کنم باید چیکار کنم؟ اگر از دستور close استفاده کنم همه کانکشن ها بسته میشن اما من میخوام فقط یکی از کانکشن ها رو قطع کنم
ممنون میشم اگر راهنمایی کنید
با تشکر
خب مگه آرایه ای از وینسوک برای هر کانکشن تو سمت سرور ندارید؟ با دادن ایندکس مورد نظر سوکت رو ببیندید.
hamidhws
شنبه 24 تیر 1391, 15:21 عصر
خب مگه آرایه ای از وینسوک برای هر کانکشن تو سمت سرور ندارید؟
نه دوست عزیز
عرض کردم که سمت سرور فقط 2 winsock دارم برای مثلا 1000 تا کانکشن
اما میتونی یک دستور تعریف کنی و اون دستور رو به اون کانکشن بفرستی و وقتی کانکشنت اون کد رو دریافت کرد دستور Close رو اجرا کنه و اونو قطع کنه
ممنون دوست عزیز اما من میخوام اینکار سمت سرور انجام بشه و بدون اینکه پیغامی واسه کلاینت ها فرستاده بشه
M.T.P
شنبه 24 تیر 1391, 18:30 عصر
هر کنترل وینسوک بیشتر از یک ارتباط نمی تونه داشته باشه چطور با یک وینسوک اونم بدونه آرایه می خواید هزار تا کانکشن رو Accept کنید؟
hamidhws
شنبه 24 تیر 1391, 19:13 عصر
هر کنترل وینسوک بیشتر از یک ارتباط نمی تونه داشته باشه چطور با یک وینسوک اونم بدونه آرایه می خواید هزار تا کانکشن رو Accept کنید؟
با یک وینسوک listen میکنیم بعدش توی قسمت connection request با یک وینسوک دیگه accept میکنیم (اینطوری یک وینسوک همیشه Listen میکنه و همچنین اون وینسوکی که accept میکنه میتونه تعداد زیادی کانکشن رو accept کنه بدون اینکه قبلی close بشه )
--------------------------
حالا میخواستم بدونم آیا راهی هست که بشه اطلاعات مربوط به کانشکن ها مثل ip یا پورتی که باهاش بهمون وصل شده رو پیدا کنیم و بعدش فقط همون کانکشن رو ببندیم؟
ممنون از پاسخگویی شما دوست عزیز
M.T.P
شنبه 24 تیر 1391, 19:51 عصر
با یک وینسوک listen میکنیم بعدش توی قسمت connection request با یک وینسوک دیگه accept میکنیم (اینطوری یک وینسوک همیشه لیستن میکنه و همچنین اون وینسوکی که accept میکنه میتونه تعداد زیادی کانکشن رو accept کنه بدون اینکه قبلی close بشه )
میشه دقیقا کد روال connection request رو اینجا قرار بدید.
و اینکه بفرمایید اتصال TCP هست یا UDP
ممنون
hamidhws
شنبه 24 تیر 1391, 20:38 عصر
من الان دسترسی به vb6 ندارم کدها رو دستی مینویسم
2 تا وینسوک تعریف میکنیم winsocklisten , winsockaccept
یکی از وینسوک ها رو در فرم لود لیستن میکنیم
winsocklisten.listen
در قسمت connection request مربوط به winsocklisten :
winsockaccept.accept requestid
M.T.P
یک شنبه 25 تیر 1391, 00:50 صبح
این دستور یعنی:
winsockaccept.accept requestid
فقط در صورتی امکان پذیره که سوکت وضعیتش بسته باشه یعنی Closed
و فقط برای یک اتصال صورت می گیره.
حتما اشتباه می کنید. :متفکر:
hamidhws
یک شنبه 25 تیر 1391, 04:50 صبح
نه دوست عزیز احتیاجی نیست قبلش close رو استفاده کنید.
در واقع close برا موقعی استفاده میشد که با همون winsock که عمل listen و انجام میدیم بخوایم accept کنیم اما الان با یه winsock دیگه accept میکنیم و وینسوک اولی در حالت listen باقی میمونه
در مورد دوم هم من تست کردم همه کانکشن ها وصل میشن (من تا 60000 کانکشن هم تست کردم) و برای اینکه مطمئن بشم بعد از اینکه کانکشن ها کانکت شدن یه سری دیتا از کانکشن های مختلف ارسال کردم .
(البته من این تست ها رو روی vs2012 و C# , winsok2005 انجام دادم چون به vb6 دسترسی نداشتم اما فکر نمیکنم تفاوتی کنه)
--------------------------------
البته من هنوز جواب سوالمو نگرفتم . ممنون میشم اگه دوستان اطلاعی دارن کمک کنن
crazyfull
یک شنبه 25 تیر 1391, 06:01 صبح
من در سمت سرور 2 تا winsock گذاشتم که یکیش listen میکنه و اون یکی accept , و به این صورت هر تعداد کانکشن که بخوام به سرور وصل میکنم .هر کنترل MSWinsock فقط ميتونه يک ارتباط رو accept کنه.
حالا فرض کنید اگه بخوام یکی از این کانکشن ها رو قطع کنم باید چیکار کنم؟ به هر حال هر کلاينت بايد يک مشخصه خاص مثل "نام کاربری" داشته باشه که با استفاده از اون بتونيد کلاينت مورد نظر رو شناسايی کنيد , سوکت کلاينت ها بايد از نوع آرايه باشه تا بتونيد با استفاده از شماره index کنترل مورد نظر سوکت رو close کنيد
بعد از accept شدن کلاينت ميتونيد کلمه اختصاصی رو تو خاصيت Tag کنترل وينساک قرار بديد که بعداً بتونيد با استفاده از اون شماره index کلاينت رو پيدا کنيد, از آی پی هم ميتونيد برای پيدا کردن شماره ايندکس استفاده کنيد به شرطی که آی پی کلاينت رو بدونيد و از هر آی پی فقط يک کلاينت متصل شده باشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.