/// <summary> /// 发送网络命令包 /// </summary> /// <param name="command"></param> /// <returns></returns> /// public bool SendData(byte[] command) { try { if (Dstream != null) { if (Dstream.CanWrite) { Dstream.Write(command, 0, command.Length); NetCmdFile.OpenFile(MainForm.pMainForm.NetCmdDataPathInfo); NetCmdFile.BinaryWrite(command); NetCmdFile.close(); return(true); } return(false); } return(false); } catch (Exception MyEx) { SendStatusLabel(MyEx.Message); AddtoBox(Color.Black, MyEx.Message + ":" + MyEx.StackTrace + "\r\n"); return(false); } }
private void NodeReceiver_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; networkdata DType = (networkdata)e.Argument; try { if (Dclient.Connected) { byte[] myReadBuffer = new byte[4100]; while ((Dstream.CanRead) && (!worker.CancellationPending)) { Array.Clear(myReadBuffer, 0, 4100); //置零 int numberOfBytesRead = 0; Dstream.Read(myReadBuffer, 0, 4); //先读包头 UInt16 PacketLength = BitConverter.ToUInt16(myReadBuffer, 2); UInt16 head = BitConverter.ToUInt16(myReadBuffer, 0); if (PacketLength > 4096) { continue; } if ((head != 0xABCD) && (head != 0xAD01) && (head != 0xAD02) && (head != 0xAD03) && (head != 0xAD04) && (head != 0xEDED) && (head != 0xEE01) && (head != 0xBB01) && (head != 0xACAC) && (head != 0x45FF)) { continue; } // Incoming message may be larger than the buffer size. do { int n = Dstream.Read(myReadBuffer, 4 + numberOfBytesRead, PacketLength - numberOfBytesRead); numberOfBytesRead += n; }while (numberOfBytesRead != PacketLength); ParseNetworkPacket(myReadBuffer, PacketLength); } if (worker.CancellationPending) { e.Cancel = true; } } } catch (SocketException MyEx) { e.Result = MyEx.ErrorCode; MainForm.ParseLock.ReleaseMutex();//ParseNetworkPacket中调用了lock AddtoBox(Color.Black, MyEx.Message + ":" + MyEx.StackTrace.ToString() + "\r\n/>"); bConnect = false; } catch (IOException IOEx) { bConnect = false; AddtoBox(Color.Black, "网络连接关闭!\r\n/>"); //SendStatusLabel("IO错误!网络连接关闭"); } }
private void AvailabilityChangedCallback(object sender, EventArgs e) { NetworkAvailabilityEventArgs myEg = (NetworkAvailabilityEventArgs)e; if (!myEg.IsAvailable) { if (Tclient == null || Dclient == null) { return; } if (Tclient.Client != null) { if (Tclient.Connected) { Tstream.Close(); Tclient.Close(); } } else { Tclient.Close(); } if (Dclient.Client != null) { if (Dclient.Connected) { Dstream.Close(); Dclient.Close(); } } else { Dclient.Close(); } if (DLoadDataWorker.IsBusy) { DLoadDataWorker.CancelAsync(); ACPacketHandle.Set(); } MessageBox.Show("网络状态出错,请检查网络!"); bConnect = false; } }
private void DLoadDataWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; networkdata data = (networkdata)e.Argument; try { filereader = new BinaryReader(File.Open(data.FileNamePath, FileMode.Open)); FileInfo d = new FileInfo(data.FileNamePath); long filelength = d.Length; if (ACPacketHandle == null) { ACPacketHandle = new EventWaitHandle(false, EventResetMode.AutoReset); } if (Dclient.Connected) { byte[] mySendBuffer = new byte[1028]; Int64 SendBytes = 0; if (Dstream.CanWrite) { int numberOfBytesRead = 0; uint head = 0xDADA; Buffer.BlockCopy(BitConverter.GetBytes(head), 0, mySendBuffer, 0, 2); while (((numberOfBytesRead = filereader.Read(mySendBuffer, 4, 1024)) != 0) && (!worker.CancellationPending)) { Buffer.BlockCopy(BitConverter.GetBytes(numberOfBytesRead), 0, mySendBuffer, 2, 2); Dstream.Write(mySendBuffer, 0, numberOfBytesRead + 4);// SendBytes += numberOfBytesRead; numberOfBytesRead = 0; worker.ReportProgress((int)((double)SendBytes * 100 / filelength)); if (!ACPacketHandle.WaitOne(10000))//等待信号超时 { Exception MyEx = new Exception("接收应答数据超时!"); throw MyEx; } if (worker.CancellationPending) { e.Cancel = true; break; } } if (worker.CancellationPending) { e.Cancel = true; } filereader.BaseStream.Seek(0, SeekOrigin.Begin);//回到文件头 byte[] totalb = filereader.ReadBytes((int)filereader.BaseStream.Length); ushort crc = CRCHelper.CRC16byte(totalb); filereader.Close(); head = 0xEDED; Buffer.BlockCopy(BitConverter.GetBytes(head), 0, mySendBuffer, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes(crc), 0, mySendBuffer, 2, 2); Dstream.Write(mySendBuffer, 0, 4); } } } catch (Exception MyEx) { MessageBox.Show(MyEx.Message); AddtoBox(Color.Black, MyEx.Message + ":" + MyEx.StackTrace.ToString() + "\r\n/>"); filereader.Close(); } }
public void ConnNodeBtn_Click(object sender, EventArgs e) { //开始连接 if (ConnNodeBtn.Text == "连接节点") { IPCollections Icf = new IPCollections(); //读取节点 XmlDocument xmlfile = new XmlDocument(); xmlfile.Load(xmldoc); string strip; XmlNode xn = xmlfile.DocumentElement; xn = xn.SelectSingleNode("descendant::节点配置"); foreach (XmlNode subnode in xn.ChildNodes) { string[] ip = { "节点配置", subnode.Name, "网络配置", "节点IP" }; strip = XmlHelper.GetConfigValue(xmldoc, ip); Icf.IPList.Items.Add(subnode.Name + " " + strip); } if (Icf.ShowDialog() == DialogResult.OK) { int g = Icf.IPList.CheckedIndices[0]; string[] str = Icf.IPList.Items[g].ToString().Split(' '); IPAddress Nodeip = IPAddress.Parse(str[1]); ConnectNode(Nodeip); } Icf.Dispose(); } //取消连接 else { bConnect = false; this.NodeLinker.CancelAsync(); this.NodeReceiver.CancelAsync(); this.CommAnsReceiver.CancelAsync(); if (Tclient.Client != null) { if (Tclient.Connected) { Tstream.Close(); Tclient.Close(); } } else { Tclient.Close(); } if (Dclient.Client != null) { if (Dclient.Connected) { Dstream.Close(); Dclient.Close(); } } else { Dclient.Close(); } SendStatusLabel("未连接节点"); ConnNodeBtn.Text = "连接节点"; AddtoBox(Color.Black, "与节点断开\r\n"); bConnect = false; } }