public override bCAPPacket RecvPacket(UInt16 iSerial) { byte[] byRecv; var recv = new bCAPPacket(); var ipEpRecv = new IPEndPoint(IPAddress.Any, 0); while (true) { try { // データグラム受信 byRecv = m_udpStream.Receive(ref ipEpRecv); if (!ipEpRecv.Equals(m_ipEpSend)) { continue; } // 受信パケットが送信パケットの応答であり、かつ、S_EXECUTINGでなければ終わり recv = m_conv.Deserialize(byRecv); if ((recv.iSerial == iSerial) && (recv.iFuncID != HResult.S_EXECUTING)) { break; } } catch (Exception ex) { throw ex; } } return(recv); }
public override bCAPPacket RecvPacket(UInt16 iSerial) { byte[] byRecv; var recv = new bCAPPacket(); using (var ms = new MemoryStream()) { var br = new BinaryReader(m_tcpStream.GetStream()); while (true) { try { // ストリームを初期化 ms.Position = 0; ms.SetLength(0); // SOH ms.WriteByte(br.ReadByte()); // Message Length byRecv = br.ReadBytes(4); ms.Write(byRecv, 0, byRecv.Length); // 残りを受信 byRecv = br.ReadBytes((Int32)bCAPByteConverter.Byte2Value(byRecv, typeof(Int32)) - 5); ms.Write(byRecv, 0, byRecv.Length); // 受信パケットが送信パケットの応答であり、かつ、S_EXECUTINGでなければ終わり recv = m_conv.Deserialize(ms.ToArray()); if ((recv.iSerial == iSerial) && (recv.iFuncID != HResult.S_EXECUTING)) { break; } } catch (Exception ex) { throw ex; } } } return(recv); }