怎样判断mysql是否连接_判断数据库是否存在连接

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Runtime.InteropServices;namespaceeXtremeSQLwcfws

{public classIsConnected

{//检查远程主机与本机是否存在连接//远程主机的IP///远程主机的PORT///

public static int CheckConnected(string host, stringport)

{try{

MIB_TCPTABLE tcpTableData= newMIB_TCPTABLE();

tcpTableData=GetTcpTableInfo();for (int i = 0; i 

{string i_p = GetIpAddress(tcpTableData.table[i].dwRemoteAddr) + ":" +GetTcpPort(tcpTableData.table[i].dwRemotePort).ToString();if (i_p == host + ":" + port) returntcpTableData.table[i].dwState;

}

}catch(Exception)

{ }return 0;

}

[StructLayout(LayoutKind.Sequential)]public classMIB_TCPROW

{public intdwState;public intdwLocalAddr;public intdwLocalPort;public intdwRemoteAddr;public intdwRemotePort;

}

[StructLayout(LayoutKind.Sequential)]public classMIB_TCPTABLE

{public intdwNumEntries;publicMIB_TCPROW[] table;

}protected static string GetIpAddress(longipAddrs)

{try{

System.Net.IPAddress ipAddress= newSystem.Net.IPAddress(ipAddrs);returnipAddress.ToString();

}catch{returnipAddrs.ToString(); }

}

[DllImport("Ws2_32.dll")]static extern ushort ntohs(ushortnetshort);protected static ushort GetTcpPort(inttcpPort)

{return ntohs((ushort)tcpPort);

}

[DllImport("Iphlpapi.dll")]static extern int GetTcpTable(IntPtr pTcpTable, ref int pdwSize, boolbOrder);protected staticMIB_TCPTABLE GetTcpTableInfo()

{//声明一个指针准备接受Tcp连接信息

IntPtr hTcpTableData =IntPtr.Zero;//声明hTcpTableData指针所指向的内存缓冲区大小

int iBufferSize = 0;//声明MIB_TCPTABLE对象,作为返回值

MIB_TCPTABLE tcpTable = newMIB_TCPTABLE();//声明一个List对象来临时存放MIB_TCPROW对象

List lstTcpRows = new List();//调用API来获得真正的缓冲区大小,iBufferSize默认为0,//这时调用API GetTcpTable会触发一个异常ERROR_INSUFFICIENT_BUFFER//通过这个异常系统会把真正的缓冲长度返回

GetTcpTable(hTcpTableData, ref iBufferSize, false);//为托管指针在堆上分配内存

hTcpTableData =Marshal.AllocHGlobal(iBufferSize);//求得MIB_TCPROW对象的内存字节数

int iTcpRowLen = Marshal.SizeOf(typeof(MIB_TCPROW));//根据上面得到的缓冲区大小来推算MIB_TCPTABLE里的MIB_TCPROW数组长度//下面用缓冲长度-sizeof(int)也就是去掉MIB_TCPTABLE里的成员dwNumEntries所占用的内存字节数

int aryTcpRowLength = (int)Math.Ceiling((double)(iBufferSize - sizeof(int)) /iTcpRowLen);//重新取得TcpTable的数据

GetTcpTable(hTcpTableData, ref iBufferSize, false);//下面是关键,由于MIB_TCPTABLE里的成员有一个是数组,而这个数组长度起初我们是不能确定的//所以这里我们只能根据分配的指针来进行一些运算来推算出我们所要的数据

for (int i = 0; i 

{//hTcpTableData是指向MIB_TCPTABLE缓冲区的内存起始区域,由于其成员数据在内存中是顺序排列//所以我们可以推断hTcpTableData+4(也就是sizeof(dwNumEntries)的长度)后就是MIB_TCPROW数组的第一个元素

IntPtr hTempTableRow = new IntPtr(hTcpTableData.ToInt32() + 4 + i *iTcpRowLen);

MIB_TCPROW tcpRow= newMIB_TCPROW();

tcpRow.dwLocalAddr= 0;

tcpRow.dwLocalPort= 0;

tcpRow.dwRemoteAddr= 0;

tcpRow.dwRemotePort= 0;

tcpRow.dwState= 0;//把指针数据拷贝到我们的结构对象里。

Marshal.PtrToStructure(hTempTableRow, tcpRow);

lstTcpRows.Add(tcpRow);

}

tcpTable.dwNumEntries=lstTcpRows.Count;

tcpTable.table= newMIB_TCPROW[lstTcpRows.Count];

lstTcpRows.CopyTo(tcpTable.table);returntcpTable;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值