protected virtual void Dispose(bool disposing) { if (disposing) { if (waveSocket != null) { waveSocket.Dispose(); } if (waveDataproc != null) { waveDataproc.Dispose(); } if (StartRcvEvent != null) { StartRcvEvent.Dispose(); } if (StartRcvEvent != null) { StartRcvEvent.Dispose(); } if (RcvThread != null) { RcvThread.Abort(); RcvThread = null; } IsBuilded = false; IsStopRcved = true; linkbuffer.Clear(); Console.WriteLine(@"关闭UDP线程..."); } }
void NormalThreadStart() { IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0); EndPoint senderRemote = remote; Console.WriteLine(@"启动UDP线程..."); while (true) { StartRcvEvent.WaitOne(); if (IsStopRcved) { return; } int index = 0; IsRcving = true; while (index < frameNums) { if (waveSocket == null) { IsRcving = false; break; } int offset = 0; try { while (offset < rcvBuf.Length) { int ret = waveSocket.ReceiveFrom(rcvBuf, offset, rcvBuf.Length - offset, SocketFlags.None, ref senderRemote); offset += ret; } if (!Equals(senderRemote, ConstUdpArg.Dst_NormWaveIp)) { Console.WriteLine("接收错误"); Console.WriteLine(senderRemote.ToString()); continue; } } catch (Exception e) { Console.WriteLine(e); break; } if (WorkSaveDataEventHandler != null) { WorkSaveDataEventHandler(null, rcvBuf); } PutWorkData(rcvBuf, index++); if (index >= frameNums) { index = 0; } waveDataproc.WorkBytesEvent.Set(); } } }
public void RefreshReceiveData() { StartRcvEvent.Set(); }
public void StopReceiveData() { StartRcvEvent.Reset(); RcvThread.Abort(); }
void OrigThreadStart() { IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0); EndPoint senderRemote = remote; Console.WriteLine(@"启动UDP线程..."); while (true) { while (true) { StartRcvEvent.WaitOne(); int index = 0; IsRcving = true; while (index < FrameNums) { if (waveSocket == null) { IsRcving = false; break; } int offset = 0; try { //接收数据 int ret = waveSocket.ReceiveFrom(rcvBuf, offset, rcvBuf.Length - offset, SocketFlags.None, ref senderRemote); } catch (Exception e) { Console.WriteLine(e); IsRcving = false; break; } switch (WaveType) { case ConstUdpArg.WaveType.Normal: if (WorkSaveDataEventHandler != null) { WorkSaveDataEventHandler(null, rcvBuf); } PutWorkData(rcvBuf, index++); if (index >= FrameNums) { index = 0; } waveDataproc.WorkBytesEvent.Set(); break; case ConstUdpArg.WaveType.Orig: PutOrigData(rcvBuf); waveDataproc.OrigBytesEvent.Set(); index++; index++; if (index >= FrameNums) { index = 0; } break; case ConstUdpArg.WaveType.Delay: PutDelayData(rcvBuf); index++; if (index >= FrameNums) { index = 0; } waveDataproc.DelayBytesEvent.Set(); break; default: throw new ArgumentOutOfRangeException(); } } } } }