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","连接服务器")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)