برگزیده های پرشین تولز

طريقه كار كردن با كانكشن هاي Dial-up در dotNet Framework

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran
من نياز دارم در يك پروژه به يك Dialup Connection‌ بتونم Connect و Disconnect كنم و همچنين بتونم يك كانكشن جديد ايجاد كنم.

جستجو كردم براي پيدا كردن يك تكنيك دات نتي، كه نتيجه اي بدست نياوردم. خوشحال ميشم دوستاني كه در اين زمينه تجربه اي دارند، كمك كنند. :happy:

فقط اضافه كنم rasdial.exe بدرد كار من نمي خوره، بهم پيشنهاد ندين. چون نياز دارم وضعيت كانكشن ها (Connect, Disconnect, Connecting) رو داشته باشم و از طريق Event احتمالي هم بتونم از Connect يا Disconnect شدن يك كانكشن هم مطلع بشم و همچنين بتونم يك كانكشن جديد ايجاد كنم. نهايتاً از اينها ميخوام توي ويندوز Vista و Server 2008 استفاده كنم.

زبان كه من كد مي نويسم #C هست، اما اگه كد VB.NET هم بود، استقبال مي كنم.
 

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran

Alghoochi

Registered User
تاریخ عضویت
13 مارس 2009
نوشته‌ها
121
لایک‌ها
1

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran
تاپیکه جالبیه. حالا یه سوال دیگه چجوری میشه وضعیت ازتباط طرف با اینترنتو چک کرد؟

اگه بخوایم وضعیت کانکشن رو بررسی کنیم، خوب اگه از متد DialAsync توی DotRas استفاده کنیم، میتونیم از طریق Event StateChanged وضعیت کانکشن رو وقتی که داریم باهاش کار میکنیم داشته باشیم:
کد:
class Program
{
    using System;
    using DotRas;

    private static RasDialer dialer;

    private static void dialer_StateChanged(object sender, StateChangedEventArgs e)
    {
        Console.WriteLine(e.State.ToString());
    }

    public static void Main(string[] args)
    {
        dialer = new RasDialer();
        dialer.StateChanged += new EventHandler<StateChangedEventArgs>(dialer_StateChanged);
        dialer.EntryName = "MyEntry";

        // Asynchronously dial the connection. This method raises the StateChanged event.
        dialer.DialAsync();
    }
}

اگه لازم بود که چک کنی که کدوم کانشکن ها Active هستند، یا وضعیت یه کانکشن خاص رو چک کنی، میتونی به روش زیر عمل کنی:
کد:
class Program
{
    using System;
    using System.Collections.ObjectModel;
    using DotRas;

    public static void Main(string[] args)
    {
        using (RasDialer dialer = new RasDialer())
        {
            foreach (RasConnection connection in dialer.GetActiveConnections())
            {
                RasConnectionStatus status = connection.GetConnectionStatus();
                if (status != null)
                {
                    Console.WriteLine("Name: {0} - Status: {1}", connection.EntryName, status.ConnectionState.ToString());
                }
            }
        }
    }
}

حالا اگه فقط خواستی که وضعیت اینترنت رو چک کنی، که سیستم به اینترنت متصل شده یا نه، دو روش رو میتونم بهت پیشنهاد کنم. اول اینکه میتونی System.Net.Dns.GetHostEntry(hostname)a استفاده کنی، در صورتیکه Exception رخ بده، متوجه میشی که دسترسی به اینترنت نداری:
کد:
class Program
{
    static void Main(string[] args)
    {
        try
        {
            System.Net.Dns.GetHostEntry("www.google.com");
            Console.WriteLine("Internet is available!");
        }
        catch
        {
            Console.WriteLine("Internet isn't available!");
        }
    }
}

روش دوم هم اینه که میتونی از wininet.dll استفاده کنی:
کد:
using System;
using System.Runtime;
using System.Runtime.InteropServices;

public class Program
{
    //Creating the extern function...
    [DllImport("wininet.dll")]
    private extern static bool InternetGetConnectedState( out int Description, int ReservedValue );

    public static bool IsConnectedToInternet( )
    {
        int Desc ;
        return InternetGetConnectedState( out Desc, 0 ) ;
    }
    static void Main(string[] args)
    {
        //Do somethings
    }
}
 

Alghoochi

Registered User
تاریخ عضویت
13 مارس 2009
نوشته‌ها
121
لایک‌ها
1
آقا ممنون. خیلی جواب کاملی بود.

یه سوال دیگه فایل wininet.dll روی سیستم هست یا باید خودمون دانلود کنیم و کپیش کنیم.

کدوم روش بهتره؟
 

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran
آقا ممنون. خیلی جواب کاملی بود.

یه سوال دیگه فایل wininet.dll روی سیستم هست یا باید خودمون دانلود کنیم و کپیش کنیم.

کدوم روش بهتره؟

بله، البته wininet.dll جزئی از API ویندوزه. اگه MSDN Library رو کامپیوترتون نصبه توش کلمه WinINet رو سرچ کنید.

در مورد اینکه کدوم روش بهتره، بستگی به نوع کاربرد داره. البته WinINet شامل تعداد زیادی Function هست، ولی شما فقط میخواید اتصال به اینترنت رو چک کنید، پس کد System.Net.Dns.GetHostEntry("www.google.com") کار شما رو راه میندازه.

اگه کاربردتون در این حد باشه، شخصاً System.Net.Dns.GetHostEntry رو ترجیح میدم.
 

azarweb

کاربر تازه وارد
تاریخ عضویت
18 مارس 2009
نوشته‌ها
5
لایک‌ها
0
سلام

درمرود Dotras سوال دارم ، با VB.net و C برنامه نویسی میکنم و به C# آشنایی ندارم ، لطفا اگر امکانش هست توی VB.net یه مثال بنویس برا Dotras ،یه کانکت و Disconnet ساده ؛ بدون phone book .

و اینکه ، از VS2010 استفاده میکنم و DotRas v1.2 SDK.msi رو نصب کردم ولی به ویژوال استودیو اضافه نشد !!! اینم یه راهنمایی بفرمائین .

 

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran
مدت ها پیش برای کنترل کانکشن ها در پروژه ای واقعاً کلافه شده بودم. میکروسافت در هر نسخه از سیستم عاملش یک سری توابع جدید به API برای RAS اضافه کرده بود که از قضا تو بعضی از نسخه های قدیمی و جدید ویندوز سازگاری نداشتند. پیچیدگی و بی سوادی من برای بکار گیری اونها برام شده بود کابوس و پشت هم با Exception و هنگ کردن برنامه ام رو برو بودم تا اینکه پروژه متن باز DotRas رو پیدا کردم، که من رو از شر اون کابوس ها خلاص کرد. :D

دست Jeff Winn درد نکنه، چون واقعاً کمبود چنین Component برای dotNet Framework کم بود و شرکت معظم میکروسافت هم برای این منظور هیچ Solution ی ارائه نکرده بود.

سلام

درمرود Dotras سوال دارم ، با VB.net و C برنامه نویسی میکنم و به C# آشنایی ندارم ، لطفا اگر امکانش هست توی VB.net یه مثال بنویس برا Dotras ،یه کانکت و Disconnet ساده ؛ بدون phone book .

و اینکه ، از VS2010 استفاده میکنم و DotRas v1.2 SDK.msi رو نصب کردم ولی به ویژوال استودیو اضافه نشد !!! اینم یه راهنمایی بفرمائین .


شما بعد از نصب DotRas SDKs اگر به مسیری که آن را نصب کردید برید، حتماً فولدر Examples رو می بینید که آونجا چند تا پروژه رو می بینید که به هر دو زبان C Sharp و VB.NET ارائه شدن، که در نسخه اخیر یعنی v1.2 همه اون پروژه ها در فرمت Visual Studio 2010 هستند. در ضمن اینم بگم من چندان با سینتکس VB.NET آشنا نیستم، اما شما بهتر از من میدونید که بخاطر ساختار معماری دات نت مخصوصا CTS و CLR تبدیل سینتکس این دو تا زبان به هم چندان مشکل نیست. اگر در گوگل جستجویی با عبارت Convert C# to VB.NET بکنی، کلی وب سایت و برنامه برای این منظور پیدا می کنید.

بعدش یادتون باشه بنا به ساختار remote access service بدون ایجاد Connection نمی تونی به شبکه ای Connect یا Disconnect بشی (اتصال Dialup رو با اتصال شمارگیری به ترمینال اشتباه نگیرید، اینا با هم متفاوتند).

در مورد اینکه گفتید: «چیزی به ویژوال استودیو اضافه نشد»، مگه شما انتظار داشتید چی اضافه بشه! ;)
برای کار کردن با DotRas بعد از انتخاب Build Type مورد نظرتون (در انتخابش دقت کنید) از مسیر نصب DotRas SDKs داخل فولدر Bin میتونید اسمبلی مربوطه رو به Reference های پروژه تون اضافه کنی و بعدش میتونی به کلاس ها اون از طریق Name Space DotRas دسترسی داشته باشی.
 

azarweb

کاربر تازه وارد
تاریخ عضویت
18 مارس 2009
نوشته‌ها
5
لایک‌ها
0
اول ممنون که جواب دادی

بعد :

به این دوتا تصویر نگاه کن :

1111.gif


این مال ویژوال استودیوی من هس که توی Toolbox هاش Dotras نیست .

2222.gif


اینم از تو فیلم آموزشی که کامپوننته توی Toolbox هست !​

مشکل اساسی اینه ، اگه راهنمایی کنی ممنون میشم .

و آخر سر همیه سوال دیگه :

چطور میتونم لیستی از کانکشن ها رو درست کنم تا بدمشون به یه Combobox ؟

باز هم ازت تشکر میکم .
 
Last edited:

azarweb

کاربر تازه وارد
تاریخ عضویت
18 مارس 2009
نوشته‌ها
5
لایک‌ها
0
:D بالاخره تونستم به Toolbox اضافه کنم .

برای کار کردن با DotRas بعد از انتخاب Build Type مورد نظرتون (در انتخابش دقت کنید) از مسیر نصب DotRas SDKs داخل فولدر Bin میتونید اسمبلی مربوطه رو به Reference های پروژه تون اضافه کنی و بعدش میتونی به کلاس ها اون از طریق Name Space DotRas دسترسی داشته باشی.

اینجا رو درست دقت نکرده بودم !!!

ممنون
 

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran
:D بالاخره تونستم به Toolbox اضافه کنم .

برای کار کردن با DotRas بعد از انتخاب Build Type مورد نظرتون (در انتخابش دقت کنید) از مسیر نصب DotRas SDKs داخل فولدر Bin میتونید اسمبلی مربوطه رو به Reference های پروژه تون اضافه کنی و بعدش میتونی به کلاس ها اون از طریق Name Space DotRas دسترسی داشته باشی.

اینجا رو درست دقت نکرده بودم !!!

ممنون

چه خوب که مشکتون رفع شد.
البته در توضیحی قبلی که من داده بودم، به Add Tab و Choose Item برای Toolbox اشاره ای نکرده بودم که دلیلش این بود، اون زمانی که من از این مولفه ها (Components) برای پروژه ای استفاده کردم DotRas.Design به این پروژه اضافه نشده بود که بشه از اون به صورت کنترل استفاده کرد.

البته اگر هم الان بخوام در پروژه ای از DotRas استفاده کنم، ترجیح میدم با استفاده از کد نویسی از مولفه های RasDialer, RasPhoneBook, RasConnectionWatcher, RasAutoDialManager, RasDialDialog, RasEntryDialog, RasPhoneBookDialog استفاده کنم، بخاطر اینکه اونها چیزی برای نمایش بصری روی فرم ندارن! مثل SQLCEConnection که بود یا نبودش در Toolbox چندان مهم نیست!

الان که وب سایت این پروژه سر زدم، متوجه شدم Jeff Winn قصد داره نسخه 1.3 این پروژه روی dotNET framework 4 ارائه بکنه و برای این منظور در اینجا نظر خواهی داره میکنه.
 

azarweb

کاربر تازه وارد
تاریخ عضویت
18 مارس 2009
نوشته‌ها
5
لایک‌ها
0
میتونی یه نمونه کد بنویسی که یوزر ، پس رو از تکست باکس بگیره ، کانکشن رو از تو کمبو باکس انتخاب کنی و کانکت شی ؟

event ها رو هم بریزه تو یه تکست باکس .

تو ست کردن یوزر پس و انتخاب کانکشن اشکال دارم .
 

Amirpooyan

Registered User
تاریخ عضویت
23 ژوئن 2006
نوشته‌ها
631
لایک‌ها
20
محل سکونت
Tehran
میتونی یه نمونه کد بنویسی که یوزر ، پس رو از تکست باکس بگیره ، کانکشن رو از تو کمبو باکس انتخاب کنی و کانکت شی ؟

event ها رو هم بریزه تو یه تکست باکس .

تو ست کردن یوزر پس و انتخاب کانکشن اشکال دارم .

اگر نگاهی به DotRas SDK Documentation که همراه اسمبلی های پروژه است، بکنید برای هر کلاس به هر دو زبان C Sharp و VB.NET حداقل یک Example داره. در ضمن اگه گیرتون اینه که چطوری با TextBox یا ComboBox کار کنید، بهتر یه تاپیک دیگه بزنید و سوالات مربوط به کار کردن با کنترل های Windows Form رو اونجا بپرسید.

اما برای اینکه به شما کمکی بشه یه مثال میزنم ساده و کوتاه در قالب Console Application میزنم که چطوری لیست کانکشن های User جاری رو بدست بیارید:
کد:
using System;
using DotRas;

namespace DotRasTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (RasPhoneBook pbk = new RasPhoneBook())
            {
                pbk.Open(RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User));
                for (int i=0; i < pbk.Entries.Count; i++)
                    Console.WriteLine(pbk.Entries[i].Name);
            }
            Console.ReadKey();
        }
    }
}

فکر کنم کد به اندازه کافی واضح باشه اما برای اطلاعات بیشتر راجب RasPhoneBook میتونی به مستندات همراه اسمبلی ها مراجعه کنی.

یک مثال کوتاه و ساده دیگه هم در قالب Console Application برای اتصال به یک کانکشن میزنم:
کد:
using System;
using System.Net;
using DotRas;

namespace DotRasTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (RasDialer dialer = new RasDialer())
            {
                dialer.EntryName = "My ISP Connection";
                dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
                dialer.Credentials = new NetworkCredential("User", "Pass");
                dialer.Dial();
            }
            Console.ReadKey();
        }
    }
}

این مثال هم فکر کنم به اندازه کافی واضح هست.
در پست 6 این تاپیک یه نمونه کد برای استفاده از کلاس RasDialer به همراه Event مربوطه اش زدم.

امیدوارم در نهایت این نمونه کدها تونسته باشه کمکی به شما کرده باشه. موفق باشی :cool:
 
بالا