怎样知道自己的机子已上网(Internet)?

luolovegui 2004-11-17 08:03:02
我想写个上网记时程序,但是怎样知道自己的机子已上网或断网?
...全文
250 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdy119 2004-11-19
  • 打赏
  • 举报
回复
同意 AthlonxpX86(桃源村)
Magnus 2004-11-19
  • 打赏
  • 举报
回复
mark
AthlonxpX86 2004-11-19
  • 打赏
  • 举报
回复
如果是拨号上网,即有IP可以这样,最后对比IP,没有上网的话IP=127.0.0.0
char hostname[40] = {0,};
gethostname( hostname, sizeof(hostname));
struct hostent *phostent = gethostbyname(hostname);
char* stringhostip = inet_ntoa( *(struct in_addr *) phostent->h_addr_list[0] );
//得到自己机器的IP
如果是局域网,即自己没有外网IP,还是应该通过某网站来解决
char hostname[40] = {0,};
gethostname( "www.csdn.net", sizeof(hostname));
struct hostent *phostent = gethostbyname(hostname);
char* stringhostip = inet_ntoa( *(struct in_addr *) phostent->h_addr_list[0] );
lyy316 2004-11-19
  • 打赏
  • 举报
回复
ping www.yahoo.com.cn 通 OK
redchina 2004-11-19
  • 打赏
  • 举报
回复

使用InetIsOffline()

InternetOpenUrl "www.sina.com.cn"(如果www.sina.com.cn倒闭了怎么办?^-^)?

Determines whether the system is connected to the Internet.

Syntax

BOOL InetIsOffline( DWORD dwFlags
);
Parameters

dwFlags
Input flags for the function. This must be set to zero.
Return Value

Returns TRUE if the local system in not currently connected to the Internet. Returns FALSE if the local system is connected to the Internet or if no attempt has yet been made to connect to the Internet.

Function Information

Header intshcut.h
Import library url.lib
Minimum availability Internet Explorer 4.0
Minimum operating systems Windows NT 4.0, Windows 95
fmddlmyy 2004-11-19
  • 打赏
  • 举报
回复
RASAPI32就是RAS的dll。
RasEnumConnections可以枚举出当前活动的连接。
RasGetConnectStatus可以判断连接状态。例如:

RASCONN rasconns[10];
DWORD bufSize;
DWORD connnum;
RASCONNSTATUS status;

rasconns[0].dwSize = sizeof(RASCONN);
bufSize = sizeof(rasconns);
RasEnumConnections(rasconns, &bufSize, &connnum);

for ( DWORD i = 0; i < connnum; i++ ) {
status.dwSize = sizeof(status);
RasGetConnectStatus( rasconns[i].hrasconn, &status );
}

对于活动的连接status.rasconnstate 的值应为RASCS_Connected.
RAS的API还有很多,其实你耐心看看帮助就可以找到需要的功能。
luolovegui 2004-11-19
  • 打赏
  • 举报
回复
下面是我用的 AdslTime 1.0 软件中主程序的API函数表(用W32Dasm得到),与上面的一定不同,给大家参考:(删除了USER32.DLL中的函数)

ADVAPI32.GetFileSecurityA
ADVAPI32.RegCloseKey
ADVAPI32.RegCreateKeyA
ADVAPI32.RegCreateKeyExA
ADVAPI32.RegDeleteKeyA
ADVAPI32.RegDeleteValueA
ADVAPI32.RegEnumKeyA
ADVAPI32.RegOpenKeyA
ADVAPI32.RegOpenKeyExA
ADVAPI32.RegQueryValueA
ADVAPI32.RegQueryValueExA
ADVAPI32.RegSetValueA
ADVAPI32.RegSetValueExA
ADVAPI32.SetFileSecurityA
COMCTL32.ImageList_Destroy
COMCTL32.ImageList_Draw
COMCTL32.ImageList_DrawEx
COMCTL32.ImageList_GetIconSize
COMCTL32.ImageList_LoadImageA
COMCTL32.ImageList_SetBkColor
COMCTL32.InitCommonControls
comdlg32.CommDlgExtendedError
comdlg32.FindTextA
comdlg32.GetFileTitleA
comdlg32.GetOpenFileNameA
comdlg32.GetSaveFileNameA
comdlg32.PrintDlgA
comdlg32.ReplaceTextA
GDI32.AbortDoc
GDI32.BitBlt
GDI32.CombineRgn
GDI32.CreateBitmap
GDI32.CreateCompatibleBitmap
GDI32.CreateCompatibleDC
GDI32.CreateDCA
GDI32.CreateDIBitmap
GDI32.CreateFontA
GDI32.CreateFontIndirectA
GDI32.CreatePatternBrush
GDI32.CreatePen
GDI32.CreateRectRgn
GDI32.CreateRectRgnIndirect
GDI32.CreateSolidBrush
GDI32.DeleteDC
GDI32.DeleteObject
GDI32.DPtoLP
GDI32.EndDoc
GDI32.EndPage
GDI32.Escape
GDI32.ExcludeClipRect
GDI32.ExtTextOutA
GDI32.GetBkColor
GDI32.GetBkMode
GDI32.GetCharWidthA
GDI32.GetClipBox
GDI32.GetCurrentPositionEx
GDI32.GetDeviceCaps
GDI32.GetMapMode
GDI32.GetNearestColor
GDI32.GetObjectA
GDI32.GetPolyFillMode
GDI32.GetROP2
GDI32.GetStockObject
GDI32.GetStretchBltMode
GDI32.GetTextAlign
GDI32.GetTextColor
GDI32.GetTextExtentPoint32A
GDI32.GetTextExtentPointA
GDI32.GetTextFaceA
GDI32.GetTextMetricsA
GDI32.GetViewportExtEx
GDI32.GetViewportOrgEx
GDI32.GetWindowExtEx
GDI32.GetWindowOrgEx
GDI32.IntersectClipRect
GDI32.LineTo
GDI32.LPtoDP
GDI32.MoveToEx
GDI32.OffsetViewportOrgEx
GDI32.PatBlt
GDI32.PtVisible
GDI32.Rectangle
GDI32.RectVisible
GDI32.RestoreDC
GDI32.SaveDC
GDI32.ScaleViewportExtEx
GDI32.ScaleWindowExtEx
GDI32.SelectClipRgn
GDI32.SelectObject
GDI32.SetAbortProc
GDI32.SetBkColor
GDI32.SetBkMode
GDI32.SetMapMode
GDI32.SetPolyFillMode
GDI32.SetRectRgn
GDI32.SetROP2
GDI32.SetStretchBltMode
GDI32.SetTextAlign
GDI32.SetTextColor
GDI32.SetViewportExtEx
GDI32.SetViewportOrgEx
GDI32.SetWindowExtEx
GDI32.SetWindowOrgEx
GDI32.StartDocA
GDI32.StartPage
GDI32.StretchDIBits
GDI32.TextOutA
iphlpapi.GetAdaptersInfo
KERNEL32.CloseHandle
KERNEL32.CompareStringA
KERNEL32.CompareStringW
KERNEL32.CreateEventA
KERNEL32.CreateFileA
KERNEL32.CreateMutexA
KERNEL32.CreateThread
KERNEL32.DeleteCriticalSection
KERNEL32.DeleteFileA
KERNEL32.DeviceIoControl
KERNEL32.DuplicateHandle
KERNEL32.EnterCriticalSection
KERNEL32.ExitProcess
KERNEL32.ExitThread
KERNEL32.FileTimeToLocalFileTime
KERNEL32.FileTimeToSystemTime
KERNEL32.FindClose
KERNEL32.FindFirstFileA
KERNEL32.FindResourceA
KERNEL32.FlushFileBuffers
KERNEL32.FormatMessageA
KERNEL32.FreeEnvironmentStringsA
KERNEL32.FreeEnvironmentStringsW
KERNEL32.FreeLibrary
KERNEL32.GetACP
KERNEL32.GetCommandLineA
KERNEL32.GetCPInfo
KERNEL32.GetCurrentDirectoryA
KERNEL32.GetCurrentProcess
KERNEL32.GetCurrentThread
KERNEL32.GetCurrentThreadId
KERNEL32.GetDiskFreeSpaceA
KERNEL32.GetEnvironmentStrings
KERNEL32.GetEnvironmentStringsW
KERNEL32.GetFileAttributesA
KERNEL32.GetFileSize
KERNEL32.GetFileTime
KERNEL32.GetFileType
KERNEL32.GetFullPathNameA
KERNEL32.GetLastError
KERNEL32.GetLocalTime
KERNEL32.GetModuleFileNameA
KERNEL32.GetModuleHandleA
KERNEL32.GetOEMCP
KERNEL32.GetPrivateProfileIntA
KERNEL32.GetPrivateProfileStringA
KERNEL32.GetProcAddress
KERNEL32.GetProcessVersion
KERNEL32.GetProfileIntA
KERNEL32.GetProfileStringA
KERNEL32.GetShortPathNameA
KERNEL32.GetStartupInfoA
KERNEL32.GetStdHandle
KERNEL32.GetStringTypeA
KERNEL32.GetStringTypeExA
KERNEL32.GetStringTypeW
KERNEL32.GetSystemTime
KERNEL32.GetTempFileNameA
KERNEL32.GetThreadLocale
KERNEL32.GetTickCount
KERNEL32.GetTimeZoneInformation
KERNEL32.GetVersion
KERNEL32.GetVersionExA
KERNEL32.GetVolumeInformationA
KERNEL32.GlobalAddAtomA
KERNEL32.GlobalAlloc
KERNEL32.GlobalDeleteAtom
KERNEL32.GlobalFindAtomA
KERNEL32.GlobalFlags
KERNEL32.GlobalFree
KERNEL32.GlobalGetAtomNameA
KERNEL32.GlobalHandle
KERNEL32.GlobalLock
KERNEL32.GlobalReAlloc
KERNEL32.GlobalUnlock
KERNEL32.HeapAlloc
KERNEL32.HeapCreate
KERNEL32.HeapDestroy
KERNEL32.HeapFree
KERNEL32.HeapReAlloc
KERNEL32.HeapSize
KERNEL32.InitializeCriticalSection
KERNEL32.InterlockedDecrement
KERNEL32.InterlockedIncrement
KERNEL32.IsBadCodePtr
KERNEL32.IsBadReadPtr
KERNEL32.IsBadWritePtr
KERNEL32.LCMapStringA
KERNEL32.LCMapStringW
KERNEL32.LeaveCriticalSection
KERNEL32.LoadLibraryA
KERNEL32.LoadResource
KERNEL32.LocalAlloc
KERNEL32.LocalFileTimeToFileTime
KERNEL32.LocalFree
KERNEL32.LocalLock
KERNEL32.LocalReAlloc
KERNEL32.LocalUnlock
KERNEL32.LockFile
KERNEL32.LockResource
KERNEL32.lstrcatA
KERNEL32.lstrcmpA
KERNEL32.lstrcmpiA
KERNEL32.lstrcpyA
KERNEL32.lstrcpynA
KERNEL32.lstrlenA
KERNEL32.MoveFileA
KERNEL32.MulDiv
KERNEL32.MultiByteToWideChar
KERNEL32.RaiseException
KERNEL32.ReadFile
KERNEL32.ResumeThread
KERNEL32.RtlUnwind
KERNEL32.SearchPathA
KERNEL32.SetEndOfFile
KERNEL32.SetEnvironmentVariableA
KERNEL32.SetErrorMode
KERNEL32.SetEvent
KERNEL32.SetFilePointer
KERNEL32.SetFileTime
KERNEL32.SetHandleCount
KERNEL32.SetLastError
KERNEL32.SetStdHandle
KERNEL32.SetThreadPriority
KERNEL32.SetUnhandledExceptionFilter
KERNEL32.SizeofResource
KERNEL32.Sleep
KERNEL32.SuspendThread
KERNEL32.SystemTimeToFileTime
KERNEL32.TerminateProcess
KERNEL32.TlsAlloc
KERNEL32.TlsFree
KERNEL32.TlsGetValue
KERNEL32.TlsSetValue
KERNEL32.UnhandledExceptionFilter
KERNEL32.UnlockFile
KERNEL32.VirtualAlloc
KERNEL32.VirtualFree
KERNEL32.WaitForSingleObject
KERNEL32.WideCharToMultiByte
KERNEL32.WriteFile
KERNEL32.WritePrivateProfileStringA
ole32.CLSIDFromProgID
ole32.CLSIDFromString
ole32.CoFreeUnusedLibraries
ole32.CoGetClassObject
ole32.CoInitialize
ole32.CoLockObjectExternal
ole32.CoRegisterMessageFilter
ole32.CoRevokeClassObject
ole32.CoTaskMemAlloc
ole32.CoTaskMemFree
ole32.CoUninitialize
ole32.CreateILockBytesOnHGlobal
ole32.OleFlushClipboard
ole32.OleInitialize
ole32.OleIsCurrentClipboard
ole32.OleUninitialize
ole32.RegisterDragDrop
ole32.RevokeDragDrop
ole32.StgCreateDocfileOnILockBytes
ole32.StgOpenStorageOnILockBytes
OLEAUT32.SysAllocString
OLEAUT32.SysAllocStringByteLen
OLEAUT32.SysAllocStringLen
OLEAUT32.SysFreeString
OLEAUT32.SysStringLen
OLEAUT32.VariantChangeType
OLEAUT32.VariantClear
OLEAUT32.VariantCopy
OLEAUT32.VariantTimeToSystemTime
oledlg.OleUIBusyA
OLEPRO32.OleCreateFontIndirect
RASAPI32.RasDialA
RASAPI32.RasEditPhonebookEntryA
RASAPI32.RasEnumConnectionsA
RASAPI32.RasEnumEntriesA
RASAPI32.RasGetConnectStatusA
RASAPI32.RasGetEntryDialParamsA
RASAPI32.RasGetEntryPropertiesA
RASAPI32.RasGetErrorStringA
RASAPI32.RasHangUpA
RASAPI32.RasSetEntryDialParamsA
SHELL32.DragFinish
SHELL32.DragQueryFileA
SHELL32.ExtractIconA
SHELL32.Shell_NotifyIconA
SHELL32.ShellExecuteA
SHELL32.SHGetFileInfoA

WINSPOOL.ClosePrinter
WINSPOOL.DocumentPropertiesA
WINSPOOL.OpenPrinterA
WS2_32.gethostname
WS2_32.WSACleanup
WS2_32.WSACreateEvent
WS2_32.WSAGetLastError
WS2_32.WSAGetOverlappedResult
WS2_32.WSAIoctl
WS2_32.WSAResetEvent
WS2_32.WSASocketA
WS2_32.WSAStartup
WS2_32.WSAWaitForMultipleEvents

大家看看关键是哪些API函数。
luolovegui 2004-11-19
  • 打赏
  • 举报
回复
我看了大家所说的方法,可能我的想法与大家的不同,我想做的软件要像这个一样。

http://www.pcdog.com/soft/31826.htm

上面的网址有下载

也就是说只要上网我的程序就知道,就算是用 windows 的连接连上的。像大家说的用什么函数可能是个办法,但我用了不成功,而且就算可以用,也不是好办法,因为这样的方法根本不是很实用,我想像上面的软件是一定有消息(一连接就发送消息)的方法写的,大家看了上面这个软件就懂了我的意思了。

注:我就是说不用软件自带的连接功能连接也要可以知道已上网。
fmddlmyy 2004-11-19
  • 打赏
  • 举报
回复
luolovegui可以看看这个网页:
http://www.kyler.com/index.php?option=content&task=view&id=13&Itemid=31

我当时写的上网计时程序就是以这个例子为基础修改的。
RAS的函数你可以查帮助。简单说:

用RasEnumEntries列出当前建立的拨号连接,让用户选择。
用户确定拨号时,用RasDial拨号,同时传入回调函数。
在连接建立后,回调函数会收到RASCS_Connected。
luolovegui 2004-11-19
  • 打赏
  • 举报
回复
To fmddlmyy(寒潭): Please tell me some functions of RSA. Of course it must be keystone.
redchina 2004-11-19
  • 打赏
  • 举报
回复
最简单的办法:
cout<<"use InternetGetConnectedStateEx get state:"<<endl;
DWORD dwFlag;
result=InternetGetConnectedState(&dwFlag,0);
if(!result)
cout<<" net offline"<<endl;
else
cout<<"net online"<<endl;
luolovegui 2004-11-19
  • 打赏
  • 举报
回复
use Ping isn't good method. because it very slow.
fmddlmyy 2004-11-18
  • 打赏
  • 举报
回复
在Windows环境,上网计时程序一般都是使用RAS实现的。通过向RAS注册回调函数,可以了解网络连接状态,并作出适当响应。网上有很多RAS的例子可以参考。我以前用delphi写过一个计时程序,现在还在用呢。
hundlom 2004-11-18
  • 打赏
  • 举报
回复
InternetGetConnectedStateEx
vicky_jam 2004-11-18
  • 打赏
  • 举报
回复
呵呵~~
程序 每隔 一定时间 ping 一下 www.XXX.com
呵呵~~~
aoosang 2004-11-18
  • 打赏
  • 举报
回复
InternetGetConnectedStateEx
or you can use InternetOpenUrl "www.sina.com.cn"
这个方法不错
oyljerry 2004-11-17
  • 打赏
  • 举报
回复
CInternetCheckConnection
kingzai 2004-11-17
  • 打赏
  • 举报
回复
InternetGetConnectedStateEx
or you can use InternetOpenUrl "www.sina.com.cn"

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧