请问有什么 API 可检测到是否与另一台机子连通. bConnect = ???;主要的是快,不要检测那么久.应该一个 API 就可以了吗?谢了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用netstat的方法好像iphelp aip里面可以做到这些的. SetSockOpt()函数,其中设置nOptionName为SO_KEEPALIVE,lpOptionValue为true,然后当你想确认你是否还保持和另一主机的连接,那么调用getsockopt() 连接一下了。 if (connect(dlg->client,(struct sockaddr *)&(dlg->addr),sizeof(dlg->addr))) { AfxMessageBox("fail."); closesocket(dlg->client); return -1; } j检测TCP的连接,利用半开扫描看看行码,我没做过的。 用原始套接字实现,发送SYN请求,收到ACK后立即断开连接,非常快速,且不容易被发现:) 用netbios就可以发送一个命令就可以了netboi nbstat应该可以,并且的得到目的主机的网卡地址,主机名等等 试试这个函数IsDestinationReachable GetTcpTableDWORD GetTcpTable( PMIB_TCPTABLE pTcpTable, // buffer for the connection table PDWORD pdwSize, // size of the buffer BOOL bOrder // sort the table?); 在程序里定时PING一下就行,看是否与另一电脑保持连接如果你是C/S结构的发心跳连接也行,看是否与另一程序保持连接 最简单的办法就是定时查询下面是关键的代码:typedef BOOL (CALLBACK *ISNETWORKALIVE)(LPDWORD lpdwFlags);#define NETWORK_ALIVE_LAN 0x00000001#define NETWORK_ALIVE_WAN 0x00000002#define NETWORK_ALIVE_AOL 0x00000004class CAutoLoadDll{public: CAutoLoadDll(const char * szDllname) { hinstLib = LoadLibrary(szDllname); } ~CAutoLoadDll() { if(hinstLib) FreeLibrary(hinstLib); } FARPROC GetProcAddress(const char * szProcname) { if(hinstLib) return ::GetProcAddress(hinstLib,szProcname); else return NULL; }public: HINSTANCE hinstLib; };class CTestDlg : public CDialog{... CAutoLoadDll m_Sensapi; ISNETWORKALIVE m_pfnIsNetworkAlive;}CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestDlg::IDD, pParent),m_Sensapi("sensapi.dll"){ m_pfnIsNetworkAlive = (ISNETWORKALIVE)m_Sensapi.GetProcAddress("IsNetworkAlive");...}BOOL CTestDlg::OnInitDialog(){... SetTimer(1,500,NULL);...}void CTestDlg::OnTimer(UINT nIDEvent) { if(nIDEvent == 1 && m_pfnIsNetworkAlive) { DWORD dwFlag = 0; if(m_pfnIsNetworkAlive(&dwFlag)) { if((dwFlag&NETWORK_ALIVE_WAN)&&(dwFlag&NETWORK_ALIVE_LAN)) SetWindowText("存在LAN和WAN"); else if(dwFlag&NETWORK_ALIVE_LAN) SetWindowText("存在LAN"); else if(dwFlag&NETWORK_ALIVE_WAN) SetWindowText("存在WAN"); else SetWindowText("没有网络"); } else { SetWindowText("没有网络"); } } CDialog::OnTimer(nIDEvent);}这样做的缺点就是反应不够即时,只有当系统收到至少一个数据包后才能加以判断.再要不就是实现ISensNetwork gethostbyname或gethostbyaddr的返回值应该可以得到是否连通 atl控件怎样使用PreTranslateMessage? 求:大文件传输程序(比方说传电影) 什么叫做精通数据库?? 如何使用Windows Update Agent API连接内网中的WSUS服务器? 编程确定可执行文件代码段,数据段等的地址范围,用到那些知识 璇烽珮鎵嬫寚鐐?>鎬庢牱瑙e喅鎷栧姩绐楀彛闂姩闂 给 DentistryDoctor(牙科医生)分,斑竹不要移到非技术去,谢谢。 求助:怎么样控制vc程序的启动呀? 关于在在windows程序中加入子窗口的问题。用到WS_CHILDWINDOW 关于调用命令行命令的问题 如何获得进程id 怎样为treeview中节点添加图标
if (connect(dlg->client,(struct sockaddr *)&(dlg->addr),sizeof(dlg->addr)))
{
AfxMessageBox("fail.");
closesocket(dlg->client);
return -1;
}
发送一个命令就可以了
netboi
IsDestinationReachable
PMIB_TCPTABLE pTcpTable, // buffer for the connection table
PDWORD pdwSize, // size of the buffer
BOOL bOrder // sort the table?
);
如果你是C/S结构的发心跳连接也行,看是否与另一程序保持连接
下面是关键的代码:
typedef BOOL (CALLBACK *ISNETWORKALIVE)(LPDWORD lpdwFlags);
#define NETWORK_ALIVE_LAN 0x00000001
#define NETWORK_ALIVE_WAN 0x00000002
#define NETWORK_ALIVE_AOL 0x00000004
class CAutoLoadDll
{
public:
CAutoLoadDll(const char * szDllname)
{
hinstLib = LoadLibrary(szDllname);
}
~CAutoLoadDll()
{
if(hinstLib)
FreeLibrary(hinstLib);
}
FARPROC GetProcAddress(const char * szProcname)
{
if(hinstLib)
return ::GetProcAddress(hinstLib,szProcname);
else
return NULL;
}
public:
HINSTANCE hinstLib;
};
class CTestDlg : public CDialog
{
...
CAutoLoadDll m_Sensapi;
ISNETWORKALIVE m_pfnIsNetworkAlive;
}
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent),m_Sensapi("sensapi.dll")
{
m_pfnIsNetworkAlive = (ISNETWORKALIVE)m_Sensapi.GetProcAddress("IsNetworkAlive");
...
}BOOL CTestDlg::OnInitDialog()
{
...
SetTimer(1,500,NULL);
...
}void CTestDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent == 1 && m_pfnIsNetworkAlive)
{
DWORD dwFlag = 0;
if(m_pfnIsNetworkAlive(&dwFlag))
{
if((dwFlag&NETWORK_ALIVE_WAN)&&(dwFlag&NETWORK_ALIVE_LAN))
SetWindowText("存在LAN和WAN");
else if(dwFlag&NETWORK_ALIVE_LAN)
SetWindowText("存在LAN");
else if(dwFlag&NETWORK_ALIVE_WAN)
SetWindowText("存在WAN");
else
SetWindowText("没有网络");
}
else
{
SetWindowText("没有网络");
}
}
CDialog::OnTimer(nIDEvent);
}
这样做的缺点就是反应不够即时,只有当系统收到至少一个数据包后才能加以判断.再要不就是实现ISensNetwork