Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Nhận biết 1 máy tính hiện thời có kết nối Internet hay không

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    55

    Lightbulb Nhận biết 1 máy tính hiện thời có kết nối Internet hay không

    Có ai biết vấn đề này chỉ giúp.

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Dùng hàm API InternetGetConnectedState() của WinINet.dll. Trích từ CodeProject VC++ FAQ:
    This API returns a BOOL indicating whether the computer is connected to a network. However, a system might be connected but in offline mode. (You toggle offline mode by clicking File->Work Offline in IE.) So you also need to check the flags returned by the API.
    Code:
        BOOL bConnected = FALSE;
        DWORD dwFlags = 0;
     
        bConnected = InternetGetConnectedState(&dwFlags, 0);
        if (TRUE == bConnected)
        {
            if (dwFlags & INTERNET_CONNECTION_OFFLINE)
            {
                bConnected = FALSE;
            }
        }
    Dưới đây là đoạn code trích từ How to... database của tui:
    Code:
    148/. How to check Internet connection and make system to connect ?
        First, search MSDN for Microsoft Win32 Internet Functions. Here we'll need
        InternetGetConnectedState() and InternetAttemptConnect() functions. Sample
        project and executable are available (MFC used).
    
        void CInetTestDlg::OnCheckConnection()
        {
            DWORD flags;
            if (InternetGetConnectedState(&flags, NULL))
                m_msg += "Internet connection is present.\r\n";
            else
                m_msg += "No Internet connection.\r\n";
    
            // Not all flags are defined. You need SDK for this.
    
            if (flags & INTERNET_CONNECTION_CONFIGURED)
                m_msg += "Local system has a valid connection to the Internet.\r\n";
            if (flags & INTERNET_CONNECTION_LAN)
                m_msg += "Local system uses a local area network to connect to the Internet.\r\n";
            if (flags & INTERNET_CONNECTION_MODEM )
                m_msg += "Local system uses a modem to connect to the Internet.\r\n";
            if (flags & INTERNET_CONNECTION_OFFLINE)
                m_msg += "Local system is in offline mode.\r\n";
            if (flags & INTERNET_CONNECTION_PROXY)
                m_msg += "Local system uses a proxy server to connect to the Internet.\r\n";
            if (flags & INTERNET_RAS_INSTALLED)
                m_msg += "Local system has RAS installed.\r\n";
    
            m_EditCtrl.SetWindowText(m_msg += "\r\n");
        }
    
        void CInetTestDlg::OnConnect()
        {
            InternetAttemptConnect(NULL);
        }
    Đã được chỉnh sửa lần cuối bởi TQN : 23-06-2007 lúc 09:31 AM.

  3. #3
    Ngày gia nhập
    05 2007
    Bài viết
    55

    TQN đúng là pro C++.
    Có ai giúp tôi bằng .net với C#. Tôi đang trên đường leave "Import APIs"
    (Nếu ko có thì sẽ dùng cách trên hoặc "Exception.Message" để nhận diện)

  4. #4
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Anh nampt thử dòng lệnh sau thử coi:
    Code:
    static bool TestConnection()
            {
                if (SystemInformation.Network) return true; //dang ket noi
                return false; //khong ket noi
            }
    <.> Không biết em trả lời vậy có đúng ý anh không nhỉ?

  5. #5
    Ngày gia nhập
    04 2007
    Bài viết
    15

    Tiện đây cho mình hỏi thêm tí xíu nhé. Đại loại là viết một ứng dụng .NET. Nó thực hiện công việc sau:
    - Nhận biết máy mình đã Established tới IP đó, Port đó kiểu BOOLEAN.
    - Sau đó lập tức nó trả về kết quả là TRUE. Nếu TRUE thì nó sẽ thực hiện thông báo là bạn đã kết nối đến địa chỉ đó rồi .
    Nhưng hiện tại chưa biết dùng hàm nào trong .NET và cách xử lý nó ra sao.
    "too much technology, in too little time. And little by little ... we went insane " (http://www.awarenetwork.org>).

  6. #6
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Mặc định Nhận biết 1 máy tính hiện thời có kết nối Internet hay không

    Sử dụng hàm GetTcpTable của thư viện Iphlpapi.dll
    Code mẫu lấy trong SDK:

    Code:
    // Declare and initialize variables
    PMIB_TCPTABLE pTcpTable;
    
    pTcpTable = (MIB_TCPTABLE*) malloc(sizeof(MIB_TCPTABLE));
    DWORD dwSize = 0;
    
    // Make an initial call to GetTcpTable to
    // get the necessary size into the dwSize variable
    if (GetTcpTable(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER) {
      GlobalFree(pTcpTable);
      pTcpTable = (MIB_TCPTABLE*) malloc ((UINT) dwSize);
    }
    
    // Make a second call to GetTcpTable to get
    // the actual data we require
    if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) == NO_ERROR) {
      for (int i = 0; i < (int) pTcpTable->dwNumEntries; i++) {
        printf("State: %ld\n", pTcpTable->table[i].dwState);
      }
    }
    
    else {
      printf("\tCall to GetTcpTable failed.\n");
    		
      LPVOID lpMsgBuf;
    		
      if (FormatMessage( 
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM | 
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dwRetVal,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
        (LPTSTR) &lpMsgBuf,
        0,
        NULL ))
      {
        printf("\tError: %s", lpMsgBuf);
      }
      LocalFree( lpMsgBuf );
    }
    Life:\> dir

  7. #7
    Ngày gia nhập
    01 2007
    Bài viết
    412

    ặc ặc, box C# mà, sao ai cũng post code từ Visual C lên vậy :(. Giải quyết câu hỏi bằng C# chứ.

  8. #8
    Ngày gia nhập
    04 2007
    Bài viết
    15

    Hic, dù sao cũng thank mod hoanglinh. Nhưng mình đang viết bằng .net mới chết chứ.
    "too much technology, in too little time. And little by little ... we went insane " (http://www.awarenetwork.org>).

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Source code của SystemInformation.Network property
    Code:
    public static bool Network
    {
        get
        {
            return ((UnsafeNativeMethods.GetSystemMetrics(0x3f) & 1) != 0);
        }
    }
    Các cậu code C# cứ nghĩ là mình thoát được API, nhưng chạy đằng trời thì cũng không thoát nó được.

  10. #10
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi TQN Xem bài viết
    Source code của SystemInformation.Network property
    Code:
    public static bool Network
    {
        get
        {
            return ((UnsafeNativeMethods.GetSystemMetrics(0x3f) & 1) != 0);
        }
    }
    Các cậu code C# cứ nghĩ là mình thoát được API, nhưng chạy đằng trời thì cũng không thoát nó được.
    Công nhận ý kiến của anh TQN là đúng, nhưng những gì mà .NET mang lại cho lập trình viên thật là to lớn, em nghĩ đơn giản là .NET đã biến những hàm API khô khan thành những phương thức rất dễ nhớ này.

Các đề tài tương tự

  1. Socket Làm sao biết máy tính có kết nối Internet hay không ?
    Gửi bởi violent_feeling trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 04-02-2013, 09:45 AM
  2. Lỗi chương trình không nhận biến(không return được biến từ public sang main)
    Gửi bởi nang trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 02-10-2011, 06:04 PM
  3. Tạo Server để có thể truy cập qua internet. Ai biết không???
    Gửi bởi trieuthietminh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 07-08-2010, 12:40 AM
  4. Nhận URL từ Internet Explorer trong lập trình C#
    Gửi bởi neverland87 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 22-06-2007, 09:32 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn