Отследить пропадание сети
От: Niswn  
Дата: 06.12.04 14:32
Оценка:
Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).
Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

Спасибо.
ICQ: 326084932
Re: Отследить пропадание сети
От: nii_im_b Мухосранск  
Дата: 06.12.04 14:41
Оценка:
Здравствуйте, Niswn, Вы писали:

N>Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).

N>Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

N>Спасибо.


GetNetworkParams?
Re[2]: Отследить пропадание сети
От: Niswn  
Дата: 06.12.04 14:51
Оценка:
Здравствуйте, nii_im_b, Вы писали:

__>Здравствуйте, Niswn, Вы писали:


N>>Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).

N>>Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

N>>Спасибо.


__>GetNetworkParams?


Спасибо. А нет ли какого-нибудь события в системе, уведомляющего о пропадании сети?
Не хотелось бы в таймере постоянно проверять: есть ли соединение.
ICQ: 326084932
Re[3]: Отследить пропадание сети
От: McQwerty Россия  
Дата: 07.12.04 10:07
Оценка:
Здравствуйте, Niswn, Вы писали:

N>Здравствуйте, nii_im_b, Вы писали:


__>>Здравствуйте, Niswn, Вы писали:


N>>>Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).

N>>>Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

N>>>Спасибо.


__>>GetNetworkParams?


N>Спасибо. А нет ли какого-нибудь события в системе, уведомляющего о пропадании сети?

N>Не хотелось бы в таймере постоянно проверять: есть ли соединение.

Вот что приходит в окно Explorer'a при вынимании и вставке шнурка:

Вынимаем:
<00001> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
<00002> 004A00E4 R WM_NULL lResult:00000000
<00003> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:000007D0 lParam:000000E0
<00004> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000

Вставляем:
<00005> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
<00006> 004A00E4 R WM_NULL lResult:00000000
<00007> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:0000076C lParam:000000E0
<00008> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000

И ещё разок вынимаем:
<00001> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
<00002> 004A00E4 R WM_NULL lResult:00000000
<00003> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:000005BC lParam:000000E0
<00004> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000

И опять вставляем:
<00005> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
<00006> 004A00E4 R WM_NULL lResult:00000000
<00007> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:00000780 lParam:000000E0
<00008> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000


В окна моих программ такое сообщение (user+16) не приходит....
Re[4]: Отследить пропадание сети
От: nii_im_b Мухосранск  
Дата: 07.12.04 10:14
Оценка:
Здравствуйте, McQwerty, Вы писали:

MQ>Здравствуйте, Niswn, Вы писали:


N>>Здравствуйте, nii_im_b, Вы писали:


__>>>Здравствуйте, Niswn, Вы писали:


N>>>>Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).

N>>>>Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

N>>>>Спасибо.


__>>>GetNetworkParams?


N>>Спасибо. А нет ли какого-нибудь события в системе, уведомляющего о пропадании сети?

N>>Не хотелось бы в таймере постоянно проверять: есть ли соединение.

MQ>Вот что приходит в окно Explorer'a при вынимании и вставке шнурка:


MQ>

MQ>Вынимаем:
MQ><00001> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
MQ><00002> 004A00E4 R WM_NULL lResult:00000000
MQ><00003> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:000007D0 lParam:000000E0
MQ><00004> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000

MQ>Вставляем:
MQ><00005> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
MQ><00006> 004A00E4 R WM_NULL lResult:00000000
MQ><00007> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:0000076C lParam:000000E0
MQ><00008> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000

MQ>И ещё разок вынимаем:
MQ><00001> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
MQ><00002> 004A00E4 R WM_NULL lResult:00000000
MQ><00003> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:000005BC lParam:000000E0
MQ><00004> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000

MQ>И опять вставляем:
MQ><00005> 004A00E4 S WM_NULL wParam:00000000 lParam:00000000
MQ><00006> 004A00E4 R WM_NULL lResult:00000000
MQ><00007> 004A00E4 S message:0x0410 [User-defined:WM_USER+16] wParam:00000780 lParam:000000E0
MQ><00008> 004A00E4 R message:0x0410 [User-defined:WM_USER+16] lResult:00000000


MQ>В окна моих программ такое сообщение (user+16) не приходит....



ну дык ессесено... и не должно. настоятельно рекомендую почитать про WM_USER...
Re: Отследить пропадание сети
От: butcher Россия http://bu7cher.blogspot.com
Дата: 08.12.04 07:02
Оценка: 1 (1)
Здравствуйте, Niswn, Вы писали:

N>Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).

N>Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

#include    <winsock2.h>
#include    <iostream>

#pragma        comment(lib, "ws2_32.lib")

int main(void)
{
    using            std::cout;
    using            std::cerr;
    using            std::endl;
    WSADATA            wd;
    SOCKET            sock;
    int                nRet;
    SOCKADDR_IN        saddr;

    if((nRet = WSAStartup(MAKEWORD(2, 0),&wd)) != 0){
        cerr << "WSAStartup fail with code " << nRet << endl;
        return -1;
    }
    sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if(sock == INVALID_SOCKET){
        cerr << "socket fail with code " << WSAGetLastError() << endl;
        return -2;
    }
    ZeroMemory(&saddr, sizeof(SOCKADDR_IN));
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(5678);
    if(bind(sock, reinterpret_cast<SOCKADDR*>(&saddr), sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
    {
        WSAEVENT    hEvent;
        DWORD        dw = 0;
        char        *buf = 0;
        hEvent = WSACreateEvent();
        nRet = WSAEventSelect(sock, hEvent, FD_ROUTING_INTERFACE_CHANGE);
        nRet = WSAIoctl(sock, SIO_ROUTING_INTERFACE_CHANGE, reinterpret_cast<char*>(&saddr), 
            sizeof(saddr), buf, 0, &dw, 0, 0);
        nRet = WSAGetLastError();
        nRet = WaitForSingleObject(hEvent, INFINITE);
        if(nRet == 0){
            cout << "Что-то с интерфейсом!!!" << endl;
        }
        WSACloseEvent(hEvent);
    }else{
        cerr << "bind fail with code " << WSAGetLastError() << endl;
    }
    closesocket(sock);
    WSACleanup ();
    
    return 0;
}

Нет ничего невозможного..
Re[2]: Отследить пропадание сети
От: savosin_sergey  
Дата: 08.12.04 14:50
Оценка:
Здравствуйте, butcher, Вы писали:

B>Здравствуйте, Niswn, Вы писали:


N>>Как бы мне оследить пропадание сети программно? В виндах при пропадании сети внизу справа на панеле загорается значек "Сеть недоступна" (скажем если выдернуть сетевой шнур из компа).

N>>Есть ли какая-нибудь апишная функция или событие, которые информируют об этом?

B>
B>#include    <winsock2.h>
B>#include    <iostream>

B>#pragma        comment(lib, "ws2_32.lib")

B>int main(void)
B>{
B>    using            std::cout;
B>    using            std::cerr;
B>    using            std::endl;
B>    WSADATA            wd;
B>    SOCKET            sock;
B>    int                nRet;
B>    SOCKADDR_IN        saddr;

B>    if((nRet = WSAStartup(MAKEWORD(2, 0),&wd)) != 0){
B>        cerr << "WSAStartup fail with code " << nRet << endl;
B>        return -1;
B>    }
B>    sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
B>    if(sock == INVALID_SOCKET){
B>        cerr << "socket fail with code " << WSAGetLastError() << endl;
B>        return -2;
B>    }
B>    ZeroMemory(&saddr, sizeof(SOCKADDR_IN));
B>    saddr.sin_addr.s_addr = htonl(INADDR_ANY);
B>    saddr.sin_family = AF_INET;
B>    saddr.sin_port = htons(5678);
B>    if(bind(sock, reinterpret_cast<SOCKADDR*>(&saddr), sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
B>    {
B>        WSAEVENT    hEvent;
B>        DWORD        dw = 0;
B>        char        *buf = 0;
B>        hEvent = WSACreateEvent();
B>        nRet = WSAEventSelect(sock, hEvent, FD_ROUTING_INTERFACE_CHANGE);
B>        nRet = WSAIoctl(sock, SIO_ROUTING_INTERFACE_CHANGE, reinterpret_cast<char*>(&saddr), 
B>            sizeof(saddr), buf, 0, &dw, 0, 0);
B>        nRet = WSAGetLastError();
B>        nRet = WaitForSingleObject(hEvent, INFINITE);
B>        if(nRet == 0){
B>            cout << "Что-то с интерфейсом!!!" << endl;
B>        }
B>        WSACloseEvent(hEvent);
B>    }else{
B>        cerr << "bind fail with code " << WSAGetLastError() << endl;
B>    }
B>    closesocket(sock);
B>    WSACleanup ();
    
B>    return 0;
B>}
B>

здорово! только под winnt не работает (в цикле ждёт неисправности сети), хотя на 2000ке на соседней (по сети) машине работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.