⑴ C#如何用按鈕檢查網路是否連接
要用的函數:InternetGetConnectedState
函數原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved);
參數lpdwFlags返回當前網路狀態,參數dwReserved依然是保留參數,設置為0即可。
INTERNET_CONNECTION_MODEM 通過調治解調器連接網路
INTERNET_CONNECTION_LAN 通過區域網連接網路
這個函數的功能是很強的。它可以:
1. 判斷網路連接是通過網卡還是通過調治解調器
2. 是否通過代理上網
3. 判斷連接是On Line還是Off Line
4. 判斷是否安裝「撥號網路服務」
5. 判斷調治解調器是否正在使用
這個win32 API在系統system32文件夾中winInet.dll中
使用這個判斷的話,需要在類中這樣寫:
private const int INTERNET_CONNECTION_MODEM = 1;
private const int INTERNET_CONNECTION_LAN = 2;
[DllImport(winInet.dll)]
private static extern bool InternetGetConnectedState(
ref int dwFlag,
int dwReserved);
//調用的方法(Winform為例,放一個按鈕,單擊即可):
private void button1_Click(object sender, System.EventArgs e){
System.Int32 dwFlag = new int();
if(!InternetGetConnectedState(ref dwFlag, 0))
MessageBox.Show(未連網!);else
if((dwFlag & INTERNET_CONNECTION_MODEM)!=0)
MessageBox.Show(採用調治解調器上網。);else
);}
⑵ vb怎樣查看網路連接狀態
Winsock.state 是顯示當前Winsock 和另一主機連接的狀態,它不是顯示主機網路信息的.
用InternetGetConnectedState() 函數可以實現.為了方便你調用下面給模快代碼你吧..
Private Declare Function InternetGetConnectedState Lib "Wininet.dll" (ByVal Flag As Long, ByVal Reserved As Long) As Long
Public Type Rtn_InetStat
IsConnecting As Boolean
IsModenConnecting As Boolean
IsModenBusy As Boolean
IsLANConnecting As Boolean
IsProxyConnecting As Boolean
End Type
Public Function RtnInetStat() As Rtn_InetStat
RtnInetStat.IsConnecting = RtnNunBooleanA(InternetGetConnectedState(0, 0))
RtnInetStat.IsModenConnecting = RtnNunBooleanB(InternetGetConnectedState(1, 0))
RtnInetStat.IsLANConnecting = RtnNunBooleanB(InternetGetConnectedState(2, 0))
RtnInetStat.IsProxyConnecting = RtnNunBooleanA(InternetGetConnectedState(4, 0))
RtnInetStat.IsModenBusy = RtnNunBooleanA(InternetGetConnectedState(8, 0))
End Function
Private Function RtnNunBooleanA(ByVal Num As Long) As Boolean
If Num = 0 Then
RtnNunBooleanA = False
Else
RtnNunBooleanA = True
End If
End Function
Private Function RtnNunBooleanB(ByVal Num As Long) As Boolean
If Num = 0 Then
RtnNunBooleanB = True
Else
RtnNunBooleanB = False
End If
End Function
獲取當前網路是否已連接上:
Msgbox RtnInetStat.IsConnecting
⑶ C# 網路連接判斷
下面這個程序就是, 你可以直接去建立一個控制台應用程序去調試一下
不過需要說明一下,程序的思路就是,通過PING的方式 去ping internet上計算機的IP地址(這里是隨便用的一個網通伺服器IP123.145.68.1),如果能ping成功代表,本地電腦連接上外網。。
123.145.68.1這個IP地址可以隨意換 只要是在internet上的計算機的IP都可以,不過如果你程序的這個IP不是通過配置,而是寫死在程序中的情況,推薦你使用一個一直都在線的計算機IP ,比如QQ,163等伺服器IP(你應該明白吧)
那個IP 也可以換成 如http://www.163.com的 字元串,不過這時候 需要對
PingReply pr = p.Send("http://www.163.com");這句代碼 進行try catch一下(因為,斷開網路的時候會拋出異常);
暫停10分鍾的那段代碼要寫在catch里,這里就不詳細列出了。 你肯定知道的。
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.NetworkInformation;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Ping p = new Ping();//創建Ping對象p
PingReply pr = p.Send("123.145.68.1");//向指定IP或者主機名的計算機發送ICMP協議的ping數據包
if (pr.Status == IPStatus.Success)//如果ping成功
{
Console.WriteLine("網路連接成功, 執行下面任務...");
}
else
{
int times = 0;//重新連接次數;
do
{
if (times >= 12)
{
Console.WriteLine("重新嘗試連接超過12次,連接失敗程序結束");
return;
}
Thread.Sleep(600000);//等待十分鍾(方便測試的話,你可以改為1000)
pr = p.Send("123.145.68.1");
Console.WriteLine(pr.Status);
times++;
}
while (pr.Status != IPStatus.Success);
Console.WriteLine("連接成功");
times = 0;//連接成功,重新連接次數清為0;
}
}
}
}
不知道符合你要求不, 希望對你有幫助 ,,睡了 累死了,,語文差死了 所以組織了很久的語言,哈哈,
⑷ 判斷網路連接是否正常的方法
要用的函數:InternetGetConnectedState
函數原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved);
參數lpdwFlags返回當前網路狀態,參數dwReserved依然是保留參數,設置為0即可。
INTERNET_CONNECTION_MODEM 通過調治解調器連接網路
INTERNET_CONNECTION_LAN 通過區域網連接網路
這個函數的功能是很強的。它可以:
1. 判斷網路連接是通過網卡還是通過調治解調器
2. 是否通過代理上網
3. 判斷連接是On Line還是Off Line
4. 判斷是否安裝「撥號網路服務」
5. 判斷調治解調器是否正在使用
這個win32 API在系統system32文件夾中winInet.dll中
使用這個判斷的話,需要在類中這樣寫:
private const int INTERNET_CONNECTION_MODEM = 1;
private const int INTERNET_CONNECTION_LAN = 2;
[DllImport("winInet.dll")]
private static extern bool InternetGetConnectedState( ref int dwFlag, int dwReserved );
//調用的方法(Winform為例,放一個按鈕,單擊即可):
private void button1_Click(object sender, System.EventArgs e){System.Int32 dwFlag = new int();
if(!InternetGetConnectedState(ref dwFlag, 0))
MessageBox.Show("未連網!");
else if((dwFlag & INTERNET_CONNECTION_MODEM)!=0)
MessageBox.Show("採用調治解調器上網。");
⑸ 在C#中有哪個函數是判斷網路是否有鏈接
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Pinyin
{
public partial class Form4 : Form
{
// 定義常量
private const long INTERNET_CONNECTION_MODEM = 1;//Local system uses a modem to connect to the Internet.
private const long INTERNET_CONNECTION_LAN = 2; //Local system uses a local area network to connect to the Internet.
private const long INTERNET_CONNECTION_PROXY = 4;//Local system uses a proxy server to connect to the Internet.
private const long INTERNET_CONNECTION_MODEM_BUSY = 8; //No longer used.
private const long INTERNET_CONNECTION_CONFIGURED = 64; //Local system has a valid connection to the Internet, but it might or might not be currently connected.
private const long INTERNET_CONNECTION_OFFLINE = 32; // Local system is in offline mode.
private const long INTERNET_RAS_INSTALLED = 16; //Local system has RAS installed.
public Form4()
{
InitializeComponent();
}
//定義(引用)API函數
[DllImport("wininet.dll")]
public static extern bool InternetGetConnectedState(out long lpdwFlags, long dwReserved);
private void button1_Click(object sender, EventArgs e)
{
long lfag;
string strConnectionDev = "";
if (InternetGetConnectedState(out lfag, 0))
strConnectionDev = "網路連接正常!";
else
strConnectionDev = "網路連接不可用!";
if ((lfag & INTERNET_CONNECTION_OFFLINE) > 0)
strConnectionDev += "OFFLINE 本地系統處於離線模式。";
if ((lfag & INTERNET_CONNECTION_MODEM) > 0)
strConnectionDev += "Modem 本地系統使用數據機連接到互聯網。";
if ((lfag & INTERNET_CONNECTION_LAN) > 0)
strConnectionDev += "LAN 本地系統使用的區域網連接到互聯網。";
if ((lfag & INTERNET_CONNECTION_PROXY) > 0)
strConnectionDev += "a Proxy";
if ((lfag & INTERNET_CONNECTION_MODEM_BUSY) > 0)
strConnectionDev += "Modem but modem is busy";
MessageBox.Show(strConnectionDev);
}
}
}
⑹ MFC控制台編程,檢查電腦是否連網,該用什麼函數
找了幾種方法, 都比較復雜. 沒有專門的 用於測試是否正常連接 Internet 的函數,
不過可以間接找幾種方法.
1. cmd 命令 ping . 最直觀的命令, 但是如果在程序內執行, 很難獲取到他的回顯信息. 網上是通過創建管道來獲取回顯, 具體可以查詢相關代碼,有人寫好了. 還有我自己想的一種方法,
ping *** > res.txt 重定向回顯信息到文件, 讀取文件內容作判斷. 之後刪除這個文件,
2. URLDonwLoadToFile函數. 函數名很直觀, 缺點也是 需要寫文件, 這個返回值 就是是否聯網了, 當然跟本地網路,和伺服器響應都有關聯, 如果這一次請求沒成功, 或者本地網路延遲較大,那麼只做一次判斷的話顯然不是很准確.
你是在控制台, 如果在 MFC 類庫下的話, 有一個 CInternetSession 類, 很好用, 可以打開某一網頁,就知道 主機是否可以正常聯網了.
也有很多第3方的 類似 curl 等等..
⑺ 求大神指點vb.net 怎麼判斷 網路是否連接 和取本機區域網IP和互聯網IP
你這段代碼可以獲得該主機名下的所有ip,每個ip地址都是有類型簇的,可以區別本地地址和網路地址、ip6地址。
你獲取索引為0的ip,不一定是正確的網路地址,它有時順序在中間,在後面。
應該獲取所有ip,再通過ip地址簇類型區分
判斷連接本身有一個函數,不過有時沒聯網也是真。
可以用ping,ping網路、ping訪問速度快、不經常維護斷線的網路主機。
⑻ c語言如何檢測網路是否連接
1、如果對方斷開連接的話,那麼readNum = recv ( socketId, rcvBuf, rcvBufSize, 0 );
readNum返回值應該是0,可以根據返回值判斷。
2、recv函數返回值說明
recv函數
int recv( SOCKET s, char FAR *buf, int len, int flags);
不論是客戶還是伺服器應用程序都用recv函數從TCP連接的另一端接收數據。該函數的第一個參數指定接收端套接字描述符; 第二個參數指明一個緩沖區,該緩沖區用來存放recv函數接收到的數據; 第三個參數指明buf的長度; 第四個參數一般置0。
這里只描述同步Socket的recv函數的執行流程。當應用程序調用recv函數時,
(1)recv先等待s的發送緩沖中的數據被協議傳送完畢,如果協議在傳送s的發送緩沖中的數據時出現網路錯誤,那麼recv函數返回SOCKET_ERROR,
(2)如果s的發送緩沖中沒有數據或者數據被協議成功發送完畢後,recv先檢查套接字s的接收緩沖區,如果s接收緩沖區中沒有數據或者協議正在接收數 據,那麼recv就一直等待,直到協議把數據接收完畢。當協議把數據接收完畢,recv函數就把s的接收緩沖中的數據到buf中(注意協議接收到的數據可能大於buf的長度,所以 在這種情況下要調用幾次recv函數才能把s的接收緩沖中的數據完。recv函數僅僅是數據,真正的接收數據是協議來完成的), recv函數返回其實際的位元組數。如果recv在時出錯,那麼它返回SOCKET_ERROR;如果recv函數在等待協議接收數據時網路中斷了,那麼它返回0。 默認 socket 是阻塞的 解阻塞與非阻塞recv返回值沒有區分,都是 <0 出錯 =0 連接關閉 >0 接收到數據大小,
特別:返回值<0時並且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情況下認為連接是正常的,繼續接收。只是阻塞模式下recv會阻塞著接收數據,非阻塞模式下如果沒有數據會返回,不會阻塞著讀,因此需要循環讀取)。
返回說明: 成功執行時,返回接收到的位元組數。另一端已關閉則返回0。失敗返回-1,errno被設為以下的某個值 EAGAIN:套接字已標記為非阻塞,而接收操作被阻塞或者接收超時 EBADF:sock不是有效的描述詞 ECONNREFUSE:遠程主機阻絕網路連接 EFAULT:內存空間訪問出錯 EINTR:操作被信號中斷 EINVAL:參數無效 ENOMEM:內存不足 ENOTCONN:與面向連接關聯的套接字尚未被連接上 ENOTSOCK:sock索引的不是套接字 當返回值是0時,為正常關閉連接;
思考:當對側沒有send,即本側的套接字s的接收緩沖區無數據,返回值是什麼(EAGAIN,原因為超時,待測)
⑼ C#檢查網路是否連接的方法
C#檢查網路是否連接 在網上查到有幾種方式檢查網路是否連接,測試了一下,第一種方式受到ping時延的影響,在某些不支持ping的地址或者網段甚至不可用,因此建議採用方法2 1. 調用cmd中的ping 命令,分析輸出信息來確定網路是否連接 //使用ping命令來判斷,txtIP文本框輸入一個有效的遠程主機ip System.Diagnostics.Process proIP=new System.Diagnostics.Process(); proIP.StartInfo.FileName="cmd.exe"; proIP.StartInfo.UseShellExecute = false; proIP.StartInfo.RedirectStandardInput = true; proIP.StartInfo.RedirectStandardOutput = true; proIP.StartInfo.RedirectStandardError = true; proIP.StartInfo.CreateNoWindow = true;//不顯示cmd窗口 proIP.Start(); proIP.StandardInput.WriteLine("ping "+this.txtIP.Text.Trim()); proIP.StandardInput.WriteLine("exit"); string strResult=proIP.StandardOutput.ReadToEnd(); if(strResult.IndexOf("(0% loss)")!=-1) this.txtShow.Text="Ping 通了!" proIP.Close(); 2. 使用InternetGetConnectedState()函數這個win32 API在系統system32文件夾中winInet.dll中,可以用來判斷是否聯網和上網的方式是Modem 還是LAN等 //使用DllImport需導入命名空間 using System.Runtime.InteropServices; //InternetGetConnectedState返回的狀態標識位的含義: private const int INTERNET_CONNECTION_MODEM = 1; private const int INTERNET_CONNECTION_LAN = 2; private const int INTERNET_CONNECTION_PROXY = 4; private const int INTERNET_CONNECTION_MODEM_BUSY = 8; [DllImport( "winInet.dll ")] //聲明外部的函數: private static extern bool InternetGetConnectedState( ref int dwFlag, int dwReserved ); static void Main(string[] args) { int dwFlag = 0; string netstatus = ""; if (!InternetGetConnectedState(ref dwFlag, 0)) Console.WriteLine("未聯網!"); else { if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0) netstatus += " 採用調治解調器上網 /n"; if ((dwFlag & INTERNET_CONNECTION_LAN) != 0) netstatus += " 採用網卡上網 /n"; if ((dwFlag & INTERNET_CONNECTION_PROXY) != 0) netstatus += " 採用代理上網 /n"; if ((dwFlag & INTERNET_CONNECTION_MODEM_BUSY) != 0) netstatus += " MODEM被其他非INTERNET連接佔用 /n"; } Console.WriteLine(netstatus); Console.ReadLine(); }