Android 10. 判定Socket 是否连接网络

Android 10. 判定Socket 是否连接网络,第1张

Scoket 判定是否连接网络不仅需要使用isClose方法进行判定,同时需要使用isConnected方法来判断Socket对象 是否连接成功。

1) isConnected方法所判断的并不是Socket对象的当前连接状态, 而是Socket对象是否曾经连接成功过,如果成功连接过,即使现在isClose返回true, isConnected仍然返回true。因此,要判断当前的Socket对象是否处于连接状态, 必须同时使用isClose和isConnected方法, 即只有当isClose返回false,isConnected返回true的时候Socket对象才处于连接状态。

1) 在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInput和shutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。和isClosed、isConnected方法一样,Socket类也提供了两个方法来判断Socket对象的输入、输出流是否被关闭,这两个方法是isInputShutdown()和isOutputShutdown()。 shutdownInput和shutdownOutput并不影响Socket对象的状态。

先用Socket来判断与服务器是否连接成功,然后在进行数据库 *** 作。

[csharp] view plain copy print?

#region 采用Socket方式,测试服务器连接

/// <summary>

/// 采用Socket方式,测试服务器连接

/// </summary>

/// <param name="host">服务器主机名或IP</param>

/// <param name="port">端口号</param>

/// <param name="millisecondsTimeout">等待时间:毫秒</param>

/// <returns></returns>

public static bool TestConnection(string host, int port, int millisecondsTimeout)

{

TcpClient client = new TcpClient()

try

{

var ar = client.BeginConnect(host, port, null, null)

ar.AsyncWaitHandle.WaitOne(millisecondsTimeout)

return client.Connected

}

catch (Exception e)

{

throw e

}

finally

{

client.Close()

}

}

#endregion

下面是数据库的 *** 作,可以根据自己的情况修改。

[csharp] view plain copy print?

/// <summary>

/// 数据库连接 *** 作,可替换为你自己的程序

/// </summary>

/// <param name="ConnectionString">连接字符串</param>

/// <returns></returns>

private static bool TestConnection(string ConnectionString)

{

bool result = true

try

{

SqlConnection m_myConnection = new SqlConnection(ConnectionString)

m_myConnection.Open()

//数据库 *** 作......

m_myConnection.Close()

}

catch (Exception ex)

{

System.Diagnostics.Debug.WriteLine(ex.ToString())

result = false

}

return result

}

我这里用winForm来测试的。

[csharp] view plain copy print?

private void btnSocket_Click(object sender, EventArgs e)

{

string strCon = "Data Source=192.168.24.566Initial Catalog=qmasterUser ID=sapassword=123456"

string[] s=strCon.Split('')

s = s[0].Split('=')

//获取IP

string strIP =s[1]

//发送数据,判断是否连接到指定ip

if (TestConnection(strIP , 1433, 500))

{

//连接成功

MessageBox.Show("Socket Link Succeed","连接服务器")

// 数据库 *** 作,我这里用了连接测试。可根据你的系统自行修改

if (TestConnection(strCon))

MessageBox.Show("Sql Link Succeed","连接数据库")

else

MessageBox.Show("Sql Link Failed", "连接数据库")

}

else

MessageBox.Show("Socket Link Failed","连接服务器")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10828514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存