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); } }
/// <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; } } }
private void HandleFrame(ReceiveData.Data recvData) { if (recvData.BufferID == ReceiveData.Constants.BufferIDs["PING"]) { SendPong(recvData); } }