private void StartReceive(object sender, DoWorkEventArgs e) { int sleecount = 0; while (this.socket.Connected) { #if _Not_Uset_NS_ #region 直接使用Socket收数据 if (socket != null && socket.Connected) { if (socket.Poll(1, SelectMode.SelectRead)) { try { byte[] buffer = new byte[1024]; int readBytes = socket.Receive(buffer); if (readBytes == 0) { //连接断开 nOffset = 0; Array.Clear(rbuf, 0, rbuf.Length); break; } else { string cmdTarget = ""; int indexofArr = 0; Array.Copy(buffer, nOffset, rbuf, nOffset, readBytes); nOffset += readBytes; if (!CommunicateFun.CheckEndChar(rbuf, System.Text.Encoding.Default.GetBytes(m_strLine), out indexofArr)) { } else { byte[] buffer2 = new byte[indexofArr]; Array.Copy(rbuf, buffer2, indexofArr); cmdTarget = IP.ToString() + "#" + Port.ToString() + "#" + System.Text.Encoding.Default.GetString(buffer2); nOffset = 0; //调用服务器内注册函数 Array.Clear(rbuf, 0, rbuf.Length); try { this.OnCommandReceived(new CommandEventArgs(cmdTarget)); } catch (Exception esd) { } cmdTarget = ""; nOffset = 0; } } } catch (Exception es) { //连接断开 nOffset = 0; Array.Clear(rbuf, 0, rbuf.Length); continue; } } }//end if socket is OK and data is OK #endregion #else if (networkStream.DataAvailable) { //if (this.networkStream.Length != 0) //{ int temp = 2048; //256; // temp = (int)this.networkStream.Length; byte[] buffer = new byte[temp]; int readBytes = this.networkStream.Read(buffer, 0, temp); if (readBytes == 0) { break; } string cmdTarget = ""; byte[] rbuf = new byte[readBytes]; Array.Copy(buffer, rbuf, readBytes); cmdTarget = System.Text.Encoding.Default.GetString(rbuf); this.OnCommandReceived(new CommandEventArgs(cmdTarget.Trim())); //} } #endif//endif _Not_Uset_NS_ //try //{ // if (sleecount >= 100) // { // sleecount = 0; // } //} //catch (System.Exception) //{ // break; //} System.Threading.Thread.Sleep(1); //sleecount++; } this.OnDisconnected(new ClientEventArgs(this.socket)); this.Disconnect(); }
/// <summary> /// 获取网口缓存数据 直到有结束符 /// /// </summary> /// <param name="count"></param> private void ReceiveProess(int count) { string receiveString = Encoding.Default.GetString(m_recvBuffer, 0, count); // _logger.Info(DateTime.Now.ToString() + $"IP:{m_strIP} Port:{m_nPort} 结束符:{m_strLine} 接收字串:" + receiveString); int tsLength = m_strLine.Length; int indexofarr = -1; try { string cmdTarget = ""; int indexofArr = 0; Array.Copy(m_recvBuffer, nOffset, rbuf, nOffset, count); nOffset += count; if (!CommunicateFun.CheckEndChar(rbuf, System.Text.Encoding.Default.GetBytes(m_strLine), out indexofArr)) { } else { try { byte[] bytearr = new byte[indexofArr]; Array.Copy(rbuf, bytearr, indexofArr); this.RaiseDataReceived(bytearr); } catch (Exception ex) { } nOffset = 0; Array.Clear(rbuf, 0, rbuf.Length); Array.Clear(m_recvBuffer, 0, m_recvBuffer.Length); } } catch (Exception es) { //连接断开 nOffset = 0; Array.Clear(rbuf, 0, rbuf.Length); } //遍历字符串 直到结束符 //for (int i = 0; i < receiveString.Length;) //{ // if (i <= receiveString.Length - tsLength) // { // if (receiveString.Substring(i, tsLength) != m_strLine) // { // sbReceiveDataBuffer.Append(receiveString[i]); // i++; // } // else // { // try // { // _logger.Info(DateTime.Now.ToString() + $"IP:{m_strIP} Port:{m_nPort} 找到结束符{m_strLine} 字串:" + Encoding.Default.GetBytes(sbReceiveDataBuffer.ToString())); // this.RaiseDataReceived(Encoding.Default.GetBytes(sbReceiveDataBuffer.ToString().ToCharArray())); // } // catch(Exception EX) // { // } // finally // { // sbReceiveDataBuffer.Clear(); // i += tsLength; // } // } // } // else // { // sbReceiveDataBuffer.Append(receiveString[i]); // i++; // } //} }