private void btnDisconn_Click(object sender, EventArgs e) { try { if (this.dgvConn.CurrentRow == null) { MessageBox.Show("未选择连接的客户端!"); return; } IntPtr connId = (IntPtr)(Convert.ToInt32(this.dgvConn.CurrentRow.Cells[0].Value.ToString())); //IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim()); // 断开指定客户 if (server.Disconnect(connId, true)) { AddMsg(string.Format("$({0}) 断开客户端正常", connId)); } else { throw new Exception(string.Format("断开客户端ID({0}) 出错", connId)); } } catch (Exception ex) { AddMsg(ex.Message); } }
private void btnDisconn_Click(object sender, EventArgs e) { try { IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim()); // 断开指定客户 if (server.Disconnect(connId, true)) { AddMsg(string.Format("$({0}) Disconnect OK", connId)); } else { throw new Exception(string.Format("Disconnect({0}) Error", connId)); } } catch (Exception ex) { AddMsg(ex.Message); } }
private void buttonDisconnect_Click(object sender, EventArgs e) { if (checkedListBoxClientList.Items.Count > 0) { try { for (int i = 0; i < checkedListBoxClientList.Items.Count; i++) { IntPtr connId = (IntPtr)Convert.ToInt32(checkedListBoxClientList.Items[i]); if (checkedListBoxClientList.GetItemChecked(i)) { server.Disconnect(connId, true); } } } catch (Exception exc) { ShowMSG(exc.Message); } } }
/// <summary> /// 处理单个数据 /// 这个数据可以使任何的,比如登陆的,心跳的 ,还是正常的数据包都行 /// </summary> /// <param name="data">要求为 ClientInfo</param> public void ProcessSingleData(object data) { ClientInfo clientInfo = data as ClientInfo; HPSocketCS.TcpServer server = clientInfo.server; byte[] bytes = clientInfo.Data; IntPtr connId = clientInfo.ConnId; if (clientInfo != null) { if (bytes.Length == 14 && bytes[0] == 170) { //14位长,并且第一位是170,表示是登陆指令,解析登陆id String logid = BaseDTU.ParseLogin(bytes); if (logid != "") { try { //合法的id,首先发送心跳包 if (server.Send(clientInfo.ConnId, heartbeat, heartbeat.Length)) { //发送心跳包成功,根据过滤的设置显示发送成功的消息 if (clientInfo.ConnId.ToInt32() % showFilterNumber == 0) { AddMsg(string.Format(" 发送了心跳包 {0}", clientInfo.ConnId)); } //判断此server的dtu字典中是否存在这个logid if (clientInfo.serverManager.dtuDic.ContainsKey(logid)) { //已存在key,说明已经初始化了 try { //心跳完成,准备轮训 clientInfo.serverManager.dtuDic[logid].server = server; clientInfo.serverManager.dtuDic[logid].connId = connId; basetimermgr.AddDTU(clientInfo.serverManager.dtuDic[logid]); if (clientInfo.ConnId.ToInt32() % showFilterNumber == 0) { AddMsg(string.Format(clientInfo.serverManager.desc + " > [客户端] -> {0}开始轮询", (int)connId)); } } catch (Exception e) { MessageBox.Show(e.Message); } } else { //不存在key 未被初始化 if (server.Disconnect(connId, true)) { //正常断开非法登录客户端 } AddMsg(string.Format(" > [客户端] -> {0}断开 id : {1}", (int)connId, logid)); } } } catch (Exception e) { MessageBox.Show("发送出错" + e.Message); } } else { //非法id,断开 if (server.Disconnect(connId, true)) { //正常断开非法登录客户端 } } } else { //不是登录包 if (bytes == heartbeat) { //收到的是心跳包 } else { try { //收到的是正常任务包 BaseDTU basedtu = clientInfo.serverManager.dtuDic.Values.Where(item => item.connId == connId).FirstOrDefault(); if (basedtu != null) { //把正常数据包丢给dtu处理 basedtu.ReceivedCmd(bytes); } } catch (Exception e) { server.Disconnect(connId); } } } } else { AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, bytes.Length)); } }