public string LINE(string Eip)//查询线别方法
{
DataTable dt = new DataTable();
string res = "";
StringBuilder stringsql = new StringBuilder();
stringsql.AppendFormat("SELECT DISTINCT E.Line FROM ESDkbnew AS E WITH(NOLOCK) INNER JOIN WO_INPUTINFO_NEW AS W WITH(NOLOCK) ON E.Line=W.LINE where ip='{0}' ", Eip);
using (DBUtility.DABase objDB = new DBUtility.DABase(DBUtility.DBConnectionProvider.LasterTech))
{
res = objDB.ExecuteScalar(stringsql.ToString().Trim()).ToString();
}
return res;
}
public string WKTION(string Wip)//查询工站方法
{
DataTable dt = new DataTable();
string Wes = "";
StringBuilder stringsql = new StringBuilder();
stringsql.AppendFormat("SELECT DISTINCT E.Workstation FROM ESDkbnew AS E WITH(NOLOCK) INNER JOIN WO_INPUTINFO_NEW AS W WITH(NOLOCK) ON E.Line = W.LINE where ip = '{0}' ", Wip);
using (DBUtility.DABase objDB = new DBUtility.DABase(DBUtility.DBConnectionProvider.LasterTech))
{
Wes = objDB.ExecuteScalar(stringsql.ToString().Trim()).ToString();
}
return Wes;
}
public void GetESDKB()//循环读取服务端ip
{
DataTable dd = new DataTable();
DataTable dt= new DataTable();
StringBuilder strsql = new StringBuilder();
dd.Columns.Add("ip", typeof(String));
dd.Columns.Add("状态", typeof(String));
dd.Columns.Add("工站", typeof(String));
dd.Columns.Add("线别", typeof(String));
strsql.AppendFormat("SELECT DISTINCT E.ip FROM ESDkbnew AS E WITH(NOLOCK) INNER JOIN WO_INPUTINFO_NEW AS W WITH(NOLOCK) ON E.Line = W.LINE where 1=1 AND ip IS NOT NULL ");//查询数据库ip列所有ip
using (DBUtility.DABase objDB = new DBUtility.DABase(DBUtility.DBConnectionProvider.LasterTech))
{
dt = objDB.GetDataTable(strsql.ToString().Trim());
}
//使用tcp循环访问服务端ip
for (int i = 0; i < dt.Rows.Count; i++)
{
string strName = dt.Rows[i]["ip"].ToString();
DataRow dr = dd.NewRow();
Socket clientScoket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientScoket.Connect(new IPEndPoint(IPAddress.Parse(strName.ToString()), 8080));
if (clientScoket != null)
{
byte[] data = new byte[10240];//创建缓存区接受数据
clientScoket.Send(Encoding.UTF8.GetBytes("1")); //像服务端发送固定信息
int count = clientScoket.Receive(data); //将接受的数据存入缓存区
string str = Encoding.UTF8.GetString(data, 0, count);
if (str.Equals("0\n"))//根据服务端回传的状态显示断开或连接(0:断开 1:连接)
{
str = "断开";
}
else
{
str = "连接";
}
dr["ip"] = strName.ToString();
dr["状态"] = str;
dr["工站"] = WKTION(dr["ip"].ToString());
dr["线别"] = LINE(dr["ip"].ToString());
dd.Rows.Add(dr.ItemArray);
clientScoket.Close();
}
dataGridView1.DataSource = dd;
EquipmentstatusColor(dataGridView1);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void EquipmentstatusColor(DataGridView Equipmentgv)//根据状态改变颜色
{
if (Equipmentgv.Rows.Count > 0)
{
for (int i = 0; i < Equipmentgv.Rows.Count; i++)
{
string zt = Equipmentgv.Rows[i].Cells[1].Value.ToString();
if (zt.Equals("断开"))
{
Equipmentgv.Rows[i].DefaultCellStyle.BackColor = Color.Red;
}
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Gvdatastyle(dataGridView1);
Thread mm = new Thread(GetESDKB);
mm.IsBackground = true;
mm.Start();
}
如果服务端全部打开我的这个客户端程序运行没问题,如果有服务端处于关闭状态就会出现连接超时。现在想实现的效果就是当前ip不通的话就跳过当前IP循环下一ip这样就能实现只显示能连接成功的ip的效果了。