Exemple #1
0
        private void SendPong(ReceiveData.Data recvData)
        {
            ReceiveData.Constants.SequenceCounter["PONG"] = (byte)((ReceiveData.Constants.SequenceCounter["PONG"] + 1) % 256);

            byte[] sendData = new byte[recvData.ReceiveData.Length + 7];
            sendData[0] = ReceiveData.Constants.DataTypesByName["DATA_NO_ACK"];
            sendData[1] = ReceiveData.Constants.BufferIDs["PONG"];
            sendData[2] = ReceiveData.Constants.SequenceCounter["PONG"];
            var temp = BitConverter.GetBytes(recvData.ReceiveData.Length + 7);

            Array.Copy(temp, 0, sendData, 3, temp.Length);
            //Console.WriteLine($"SendPong() temp:{temp.Length} sendData:{sendData.Length}");
            Array.Copy(recvData.ReceiveData, 0, sendData, 7, recvData.ReceiveData.Length);
            //Console.WriteLine($"SendPong() RD:{recvData.ReceiveData.Length} PSIZE:{recvData.PacketSize}");

#if true
            string s = "";
            foreach (var b in sendData)
            {
                s += b.ToString("X2") + ",";
            }
            s += '\n';
            Console.WriteLine($"SendPong() {s}");
#endif

            var parrot = new IPEndPoint(IPAddress.Parse("192.168.42.1"), UdpSendPort);
            //Console.WriteLine($"SendPong() SPORT:{UdpSendPort}");
            using (var udpSend = new UdpClient())
            {
                //udpSend.Send(sendData, sendData.Length);
                udpSend.Send(sendData, sendData.Length, parrot);    // これでOK
                //udpSend.Send(sendData, sendData.Length, "192.168.42.1", UdpSendPort);
            }
        }
Exemple #2
0
        /// <summary>
        /// 受信したデータを取り扱う
        /// </summary>
        /// <param name="receive">受信データ</param>
        private void HandleData(byte[] receive)
        {
            int index = 0;

            for (;;)
            {
                var pack = new ReceiveData.Data();

                // パケットの取り出し
                pack.DataType         = receive[index + 0];
                pack.BufferID         = receive[index + 1];
                pack.PacketSequenceID = receive[index + 2];
                pack.PacketSize       = BitConverter.ToInt32(receive, (index + 3));
                pack.ReceiveData      = new byte[pack.PacketSize - 7];
                Array.Copy(receive, (index + 7), pack.ReceiveData, 0, (pack.PacketSize - 7));

                // 内容による対応
                HandleFrame(pack);

                // 複数パケットを受信していたら次のパケットを取り出す
                if (receive.Length == (index + pack.PacketSize))
                {
                    Console.WriteLine("1パケット\n");
                    break;
                }
                else
                {
                    Console.WriteLine($"複数パケット Index:{index} pack:{pack.PacketSize}");
                    index += pack.PacketSize;
                }
            }
        }
Exemple #3
0
 private void HandleFrame(ReceiveData.Data recvData)
 {
     if (recvData.BufferID == ReceiveData.Constants.BufferIDs["PING"])
     {
         SendPong(recvData);
     }
 }