检测网线拔出
来源:互联网 发布:mac安装windows程序 编辑:程序博客网 时间:2024/05/02 04:22
主机和客户机网口通信,已建立socket连接,当网线拔出的时候,如何检测到?
或者说当拔掉电脑上的网线时,如何编程检测到这个情况,高手帮忙,谢谢!
或者说当拔掉电脑上的网线时,如何编程检测到这个情况,高手帮忙,谢谢!
- xianglitian
- (向立天)
- 等 级:
4
可以通过心跳检测机制
- VisualEleven
- (Eleven[兔子党组织部长])
- 等 级:
7
InternetGetConnectedState函数可以得到当前网络的连接状态
- self001
- (self001)
- 等 级:
#include "stdafx.h"
#include "test.h"
#include <Wininet.h>
#include <Sensapi.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
void Fun_InternetGetConnectedState()
{
//#define INTERNET_CONNECTION_MODEM 1
//#define INTERNET_CONNECTION_LAN 2
//#define INTERNET_CONNECTION_PROXY 4
//#define INTERNET_CONNECTION_MODEM_BUSY 8
DWORD flags;//上网方式
BOOL m_bOnline=TRUE;//是否在线
m_bOnline=InternetGetConnectedState(&flags,0);
if(m_bOnline)//在线
{
if ((flags & INTERNET_CONNECTION_MODEM) ==INTERNET_CONNECTION_MODEM)
{
cout<<"在线:拨号上网/n";
}
if ((flags & INTERNET_CONNECTION_LAN) ==INTERNET_CONNECTION_LAN)
{
cout<<"在线:通过局域网/n";
}
if ((flags & INTERNET_CONNECTION_PROXY) ==INTERNET_CONNECTION_PROXY)
{
cout<<"在线:代理/n";
}
if ((flags & INTERNET_CONNECTION_MODEM_BUSY) ==INTERNET_CONNECTION_MODEM_BUSY)
{
cout<<"MODEM被其他非INTERNET连接占用/n";
}
}
else
cout<<"不在线/n";
}
void Fun_IsNetworkAlive()
{
DWORD flags;//上网方式
BOOL m_bOnline=TRUE;//是否在线
m_bOnline=IsNetworkAlive(&flags);
if(m_bOnline)//在线
{
if ((flags & NETWORK_ALIVE_LAN) ==NETWORK_ALIVE_LAN)
{
cout<<"在线:NETWORK_ALIVE_LAN/n";
}
if ((flags & NETWORK_ALIVE_WAN) ==NETWORK_ALIVE_WAN)
{
cout<<"在线:NETWORK_ALIVE_WAN/n";
}
if ((flags & NETWORK_ALIVE_AOL) ==NETWORK_ALIVE_AOL)
{
cout<<"在线:NETWORK_ALIVE_AOL/n";
}
}
else
cout<<"不在线/n";
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
// CString strHello;
// strHello.LoadString(IDS_HELLO);
// cout << (LPCTSTR)strHello << endl;
int i=0;
while (TRUE)
{
cout << "请选择测试的方式:/n"
<< "1. InternetGetConnectedState/n"
<< "2. IsNetworkAlive"
<< endl;
cin >> i;
switch(i)
{
case 1:
Fun_InternetGetConnectedState();
break;
case 2:
Fun_IsNetworkAlive();
break;
default:
cout << "错误!/n";
}
cout << endl;
}
}
return nRetCode;
}
说明:
InternetGetConnectedState():对网络状况不能及时反应
IsNetworkAlive():可以及时反应网络连通情况,但是需要服务System Event Notification支持(系统默认自动启动该服务)。使用该函数,需要安装最新的SDK(如.net的)
#include "test.h"
#include <Wininet.h>
#include <Sensapi.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
void Fun_InternetGetConnectedState()
{
//#define INTERNET_CONNECTION_MODEM 1
//#define INTERNET_CONNECTION_LAN 2
//#define INTERNET_CONNECTION_PROXY 4
//#define INTERNET_CONNECTION_MODEM_BUSY 8
DWORD flags;//上网方式
BOOL m_bOnline=TRUE;//是否在线
m_bOnline=InternetGetConnectedState(&flags,0);
if(m_bOnline)//在线
{
if ((flags & INTERNET_CONNECTION_MODEM) ==INTERNET_CONNECTION_MODEM)
{
cout<<"在线:拨号上网/n";
}
if ((flags & INTERNET_CONNECTION_LAN) ==INTERNET_CONNECTION_LAN)
{
cout<<"在线:通过局域网/n";
}
if ((flags & INTERNET_CONNECTION_PROXY) ==INTERNET_CONNECTION_PROXY)
{
cout<<"在线:代理/n";
}
if ((flags & INTERNET_CONNECTION_MODEM_BUSY) ==INTERNET_CONNECTION_MODEM_BUSY)
{
cout<<"MODEM被其他非INTERNET连接占用/n";
}
}
else
cout<<"不在线/n";
}
void Fun_IsNetworkAlive()
{
DWORD flags;//上网方式
BOOL m_bOnline=TRUE;//是否在线
m_bOnline=IsNetworkAlive(&flags);
if(m_bOnline)//在线
{
if ((flags & NETWORK_ALIVE_LAN) ==NETWORK_ALIVE_LAN)
{
cout<<"在线:NETWORK_ALIVE_LAN/n";
}
if ((flags & NETWORK_ALIVE_WAN) ==NETWORK_ALIVE_WAN)
{
cout<<"在线:NETWORK_ALIVE_WAN/n";
}
if ((flags & NETWORK_ALIVE_AOL) ==NETWORK_ALIVE_AOL)
{
cout<<"在线:NETWORK_ALIVE_AOL/n";
}
}
else
cout<<"不在线/n";
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
// CString strHello;
// strHello.LoadString(IDS_HELLO);
// cout << (LPCTSTR)strHello << endl;
int i=0;
while (TRUE)
{
cout << "请选择测试的方式:/n"
<< "1. InternetGetConnectedState/n"
<< "2. IsNetworkAlive"
<< endl;
cin >> i;
switch(i)
{
case 1:
Fun_InternetGetConnectedState();
break;
case 2:
Fun_IsNetworkAlive();
break;
default:
cout << "错误!/n";
}
cout << endl;
}
}
return nRetCode;
}
说明:
InternetGetConnectedState():对网络状况不能及时反应
IsNetworkAlive():可以及时反应网络连通情况,但是需要服务System Event Notification支持(系统默认自动启动该服务)。使用该函数,需要安装最新的SDK(如.net的)
- weblai
- (weblai)
- 等 级:
3楼的很全面。
- lijianli9
- (清秋)
- 等 级:
如果是SOCKET通讯的话,建议使用心跳包。
- Wang471981125
- (子鱼)
- 等 级:
帮顶
- TA_V_SFIQ_SFIQ
- 等 级:
以前看过好像有一个回调函数的
- TA_V_SFIQ_SFIQ
- 等 级:
http://topic.csdn.net/t/20030725/23/2073376.html
- jackson35296
- (虾哥)
- 等 级:
TCP通信方式不建议用心跳包。
阻塞模式下
recv()函数返回-1,就表示连接断开,无论是拔出网线还是主机关闭套接字
非阻塞模式下,recv()或send函数返回-1,且WSAGetLastError()为
WSAENETRESET或WSAECONNRESET表示连接断开
select模型下第四个参数存放的套接字为错误的套接字,也能标示该套接字相关的连接已断开
IOCP模型下GetQueuedCompletionStatus()返回0,且GetLastError() != WAIT_TIMEOUT标示连接断开
阻塞模式下
recv()函数返回-1,就表示连接断开,无论是拔出网线还是主机关闭套接字
非阻塞模式下,recv()或send函数返回-1,且WSAGetLastError()为
WSAENETRESET或WSAECONNRESET表示连接断开
select模型下第四个参数存放的套接字为错误的套接字,也能标示该套接字相关的连接已断开
IOCP模型下GetQueuedCompletionStatus()返回0,且GetLastError() != WAIT_TIMEOUT标示连接断开
- xiayadong
- (alphaxyd_1)
- 等 级:
心跳包!
我记得拔出网线后,socket连接是没有任何反应的!
我记得拔出网线后,socket连接是没有任何反应的!
- wonsea
- (wonsea)
- 等 级:
TCP
1.如果是本机拔掉网线,无论阻塞非阻塞socket,都会立即返回SOCKET_ERROR;
2.如果是对方拨网线,本地TCP层是不会收到FIN的,所以只能用超时检查或者心跳来确定是否连接断开;
1.如果是本机拔掉网线,无论阻塞非阻塞socket,都会立即返回SOCKET_ERROR;
2.如果是对方拨网线,本地TCP层是不会收到FIN的,所以只能用超时检查或者心跳来确定是否连接断开;
- jackson35296
- (虾哥)
- 等 级:
没用过WSAGetLastError()?
- sunshine716
- (我爱kitty猫)
- 等 级:
用InternetGetConnectedStateEx函数
- jhayumu
- (jhayumu)
- 等 级:
3楼的代码很全面
- arpnet99
- (♫ 熊猫党团委副书记 ♪)
- 等 级:
很多情况TCP连接是不能给出提示的。
- yunchao630
- (Lucifer)
- 等 级:
+1
- 检测网线拔出
- 写一个检测网线是否被拔出的守护进程(嵌入式设备上)
- 检测耳机插入拔出
- iphone检测耳机插入/拔出
- U盘插入拔出检测
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iphone检测耳机插入/拔出
- IOS检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iOS检测耳机插入/拔出
- iphone检测耳机插入/拔出
- iOS检测耳机插入/拔出
- C#实现重启应用程
- mssql-索引视图-无法对视图创建 索引,因为该视图未绑定到架构
- 如何成为Google软件工程师?
- sqlldr参数
- Dynamic MMap ran out of room
- 检测网线拔出
- 只为刷积分只为刷积分只为刷积分
- 什么是Processor affinity
- web开发中Post和Get的区别
- 第十三讲:不同类型数据间的转换
- Ubuntu10.10中安装VMware tools出现问题后如何解决
- 好好写一遍“用二分法在数列中搜寻一个数字”的代码
- 第十四讲:继承与派生的概念
- QT定时器操作