Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }