PDA

View Full Version : پیدا کردن IP کلاینت هایی که از برنامه استفاده میکنن



gol.mohsen
سه شنبه 31 خرداد 1390, 16:57 عصر
سلام به همه

من یه مشکلی برام پیش اومده اونم اینکه که من توی وی بی دات چطور میتونم بفهمم که کدام کلاینت ها از برنامه من دارن استفاده می کنن ( میخوام توی پنجره مدیریت IP و نام کاریشون نمایش داده بشه ). اگه کمکم کنید خیلی ممنون میشم.

در ضمن من چطوری میتونم IP کامپیوتر فعلی رو پیدا کنم ؟

با تشکر

saeid.memfis
سه شنبه 31 خرداد 1390, 19:08 عصر
سلام
با این دستور آی پی رو بگیر :
System.Net.Dns.GetHostName()

بعد از اینکه کلاینت ها لاگین می کنن باید آی پی شونو تو یه جدول ذخیره کنی و بعدش هم که خارج میشن اون رو پاک کنی ..همین

gol.mohsen
چهارشنبه 15 تیر 1390, 16:43 عصر
سلام
با این دستور آی پی رو بگیر :
System.Net.Dns.GetHostName()

بعد از اینکه کلاینت ها لاگین می کنن باید آی پی شونو تو یه جدول ذخیره کنی و بعدش هم که خارج میشن اون رو پاک کنی ..همین


دوست عزیز این نام کامپیوتر رو میاره ، من میخام آی پی شو بدست بیارم.
تشکر

mehdi.mousavi
پنج شنبه 16 تیر 1390, 17:59 عصر
دوست عزیز این نام کامپیوتر رو میاره ، من میخام آی پی شو بدست بیارم.تشکر

سلام.
برای بدست آوردن IP می تونید بدین شکل عمل کنید:

Dim host As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHost Name())
For Each ip As System.Net.IPAddress In host.AddressList
Select Case ip.AddressFamily
Case System.Net.Sockets.AddressFamily.InterNetworkV6
'ip.ToString() gives you the IP6
Exit Select

Case System.Net.Sockets.AddressFamily.InterNetwork
'ip.ToString() gives you the IP4
Exit Select
End Select
Next

دقت کنید که در این Loop من IP های Version 4 و 6 رو از بقیه جدا کرده ام...

موفق باشید.

ali190
پنج شنبه 16 تیر 1390, 18:20 عصر
سلام
با این دستور آی پی رو بگیر :
System.Net.Dns.GetHostName()

بعد از اینکه کلاینت ها لاگین می کنن باید آی پی شونو تو یه جدول ذخیره کنی و بعدش هم که خارج میشن اون رو پاک کنی ..همین
سلام
منظور شما رو فکر کنم اینطور متوجه شدم:
یک جدول در دیتابیس بسازم و هر کاربری که لاگین میشه IP سیستمش بدر این جدول ذخیره بشه ، و هر وقت هم که میخواد از برنامه خارج بشه (مثلاً در رویداد خروج از فرم) IP سیستمش از اون جدول حذف بشه
یعنی تا مادامی که IP اون کاربر در جدول حاضر باشه به منزله کانکت بودنه شخص هست
حالا سئوال اینجاست اگر برنامه هنگ کنه یا End Progress بشه (یا هر دلیلی که منجر به این قضیه بشه که event مربروط به خروج از فرم عملیاتی برنامه عمل نکنه) اون IP همانطور در جدول باقی میمونه و نشون میده که کاربر Connect هست زمانیکه کاربر واقعاً Connect نیست
ممنون میشم بیشتر توضیح بدید
یاعلی

bnnoor
پنج شنبه 16 تیر 1390, 19:40 عصر
سلام
منظور شما رو فکر کنم اینطور متوجه شدم:
یک جدول در دیتابیس بسازم و هر کاربری که لاگین میشه IP سیستمش بدر این جدول ذخیره بشه ، و هر وقت هم که میخواد از برنامه خارج بشه (مثلاً در رویداد خروج از فرم) IP سیستمش از اون جدول حذف بشه
یعنی تا مادامی که IP اون کاربر در جدول حاضر باشه به منزله کانکت بودنه شخص هست
حالا سئوال اینجاست اگر برنامه هنگ کنه یا End Progress بشه (یا هر دلیلی که منجر به این قضیه بشه که event مربروط به خروج از فرم عملیاتی برنامه عمل نکنه) اون IP همانطور در جدول باقی میمونه و نشون میده که کاربر Connect هست زمانیکه کاربر واقعاً Connect نیست
ممنون میشم بیشتر توضیح بدید
یاعلی

به به باز دوباره بحث رسید به مشکل همیشگی کاربری بیسیک . End Process برنامه به هر دلیلی و عدم روند خروج صحیح از فرم .
دوست عزیز خود این موضوع تا حالا بارها بحث شده و مشکل همیشگی برنامه نویسها بوده ( مخصوصا در بحث رجیستری ) . چندتا مقاله هم در موردش وجود داره که اگر خیلی براتون مهمه میتونید برید مطالعه کنید .
اما برای مشکل شما من دوتا پیشنهاد دارم :
1- یک برنامه کوچک بنویسید به نام مثلا (IP) که همراه با برنامتون اجرا بشه ( و اما مستقل کار کنه ) این برنامه به هنگام اتصال آی پی رو ارسال کنه و در صورتی که به هر دلیلی برنامه بسته شد . اول آی پی رو از لیست پاک کنه و بعد خودش بسته بشه .
2- استفاده از روش دستورات جدید است . ( یادم نمیاد کجا خوندم :اشتباه:) بطور مختصر تو این روش از طریق رجیستری و فرمانهای خود ویندوز به هنگام اجرای برنامه یه سری دستورات به ویندوز داده میشه که بعد از اینکه برنامه به هر دلیلی بسته شد ویندوز دستورات رو اجرا کنه . ( یه نمونه کوچک ازش تایمر برنامه های فروشی هست که در صورتی که برنامه به هر دلیلی بسته بشه رجیستر ویندوز مدت زمان استفاده رو ثبت میکنه و نه خود برنامه و دفه بعد برنامه از رجیستر بارگیری میشه )

ali190
پنج شنبه 16 تیر 1390, 19:58 عصر
بی خیال End Process !
اگر سیستم کاربر بخواد ریست بشه اون کاربر همانطور متصل به نرم افزار میمونه
کاربر DC شده ، در حالیکه تو نرم افزار هنوز OnLine نشون داده میشه
اینو چیکار میشه کرد؟

bnnoor
پنج شنبه 16 تیر 1390, 22:17 عصر
بی خیال End Process !
اگر سیستم کاربر بخواد ریست بشه اون کاربر همانطور متصل به نرم افزار میمونه
کاربر DC شده ، در حالیکه تو نرم افزار هنوز OnLine نشون داده میشه
اینو چیکار میشه کرد؟

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

AMIBCT
پنج شنبه 16 تیر 1390, 23:01 عصر
یه راه حل خیلی ساده اینه که
توی برنامه موقع ذخیره کردن IP در بانک اطلاعات، یه فیلد زمان هم در بانک داشته باشید و اون رو با زمان فعلی پر کنید
در برنامه هر ۵ دقیقه یک‌بار این کار رو تکرار کنید
یعنی هر ۵ دقیقه یک‌بار IP رو با زمان فعلی در بانک جایگزین کنید

این طوری می‌شه حداکثر با اختلاف ۵ دقیقه خروج کاربر رو تشخیص داد

البته این راه غیراصولی هست
و راه اصولی نوشتن یه سرور و ارتباط داشتن سرور با تک‌تک برنامه‌ها هست

FastCode
جمعه 17 تیر 1390, 00:25 صبح
واقعاً روشها جالبن.
راه سادش اینه که برنامه سرور روی یک پورت listen کنه. و کلاینت ها بهش متصل بشن.
RemoteEndPoint ه TcpClient مشکل شما رو حل میکنه.
دیتابیس هم شلوغ و به هم ریخته نمیشه.به 1NF هم توهین نمیشه.

امیدوارم توی TcpClient مشکلی نداشته باشید.

joker
جمعه 17 تیر 1390, 00:48 صبح
همين كه توي پست بالا گفتن
يك ارتباط ساده Socket از نوع TCP ايجاد كن ، هنگ كردن و ريست كردن و اينا را خودش مواظبه

gol.mohsen
جمعه 17 تیر 1390, 16:13 عصر
با تشکر از همه ی دوستان

من به چند منظور میخوام این آی پی رو بگیرم :
1- نگه داشتن سوابق ورود به سیستم
2- فهمیدن اینکه کدام یوزر از با کدام آی پی به برنامه لاگین کرده
3- محدودیت لاگین یوزرها ( مثلا یه نفر در یک زمان میتونه با اون یوزر نیم وارد بشه ، نفر دوم با اون یوزر نمیتونه وارد بشه)
4- یوزر ها + آی پی سیستم هاشون رو میخوام در کنترل پنل نرم افزارم تویه یه دیتاگرید نشون بدم وگزارش اتصالات هر کاربر رو در موقعی که لازم شد دربیارم.

فقط همین

با تشکر از همه اعضایی که کمکم کردن

مشکلم حل شده.