public void ReceiveAction(DataPackage pkgData) { //收到 文件读写请求 的应答【采集器→主机】 Struct_FileHead fileHead = new Struct_FileHead(); Struct_Clock clock = new Struct_Clock(); byte[] dataBuffer = pkgData.PureData; using (MemoryStream ms = new MemoryStream(dataBuffer)) { using (BinaryReader br = new BinaryReader(ms)) { fileHead.Buffer = br.ReadBytes(4); //要读取文件的参数 curDataLen = br.ReadInt32(); //文件长度。为 0 表示文件不存在,后续的内容均应为 0。 clock.Buffer = br.ReadBytes(7); //文件起始时间 byte duration = br.ReadByte(); //文件持续时间长度,秒为单位。对于图片,此值为 0 br.ReadInt32(); //保留字节 macState = 1; } } if (curDataLen > 0) { //读取文件数据, 发送读取数据的命令 //创建数据存储文件 curFileName = string.Format("File_{0}.dat", DateTime.Now.ToString("yyyyMMddHHmmss")); curStream = new FileStream(curFileName, FileMode.Create, FileAccess.Write); curBinaryWriter = new BinaryWriter(curStream); SendDataRead(curRecNo, 0); } }
//--------------------------------------------------------------------- //读取数据 public void SendDataRead(byte recNo, ushort packID) { //发送读取数据命令【主机→采集器】 DataPackage pkgData = new DataPackage(); pkgData.CtrlHead.CMD_ID = HCCommand.DATA_READ; pkgData.CtrlHead.CE_ID = ceInfo.CE_ID; Struct_FileHead fileHead = new Struct_FileHead(); fileHead.TriggerType = RecordTriggerType.Manual; fileHead.FileType = RecordFileType.Image; fileHead.RecordNO = recNo; fileHead.opFlag = 0; using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter bw = new BinaryWriter(ms)) { bw.Write(packID); //包序号 bw.Write(fileHead.Buffer); } pkgData.PureData = ms.ToArray(); } pkgData.Pack(); SendData(pkgData); }
public void ReceiveDataRead(DataPackage pkgData) { //收到数据【采集器→主机】 ushort packID = 0; Struct_FileHead fileHead = new Struct_FileHead(); byte[] dataBuffer = pkgData.PureData; using (MemoryStream ms = new MemoryStream(dataBuffer)) { using (BinaryReader br = new BinaryReader(ms)) { fileHead.Buffer = br.ReadBytes(4); //要读取文件的参数 packID = br.ReadUInt16(); //包序号,0x0000-0xF0EF,0xF0F0 表示最后一帧 int packDataLen = br.ReadUInt16(); //该包数据中图像数据长度,最大 506 字节。 byte[] readBytes = br.ReadBytes(packDataLen); curReadbytes+= readBytes.Length; curBinaryWriter.Write(readBytes); //将数据写入本地文件 } } if ((packID < 0xF0F0) && curReadbytes < curDataLen) { //未结束,继续读取下一包数据 packID++; SendDataRead(curRecNo, packID); OnProgress(); } else { //结束,发送确认帧 SendDataACK(curRecNo); OnProgress(); } }
void SendFileWrite() { //发送 “读取/写入文件”命令 【主机→采集器】 DataPackage pkgData = new DataPackage(); pkgData.CtrlHead.CMD_ID = HCCommand.FILE_RW_REQUEST; pkgData.CtrlHead.CE_ID = 0; Struct_FileHead fileHead = new Struct_FileHead(); fileHead.RecordNO = 0; using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter bw = new BinaryWriter(ms)) { bw.Write(fileHead.Buffer); //要查询文件的参数 bw.Write((uint)curDataLen); //文件长度。对读取操作时应填 0。 } pkgData.PureData = ms.ToArray(); } pkgData.Pack(); SendData(pkgData); }
//--------------------------------------------------------------------- //写入数据 public void SendDataWrite(byte recNo, ushort packID) { //发送写入数据命令【主机→采集器】 DataPackage pkgData = new DataPackage(); pkgData.CtrlHead.DIR = (uint)E_DIR.DOWN; pkgData.CtrlHead.FLAG = (uint)E_FLAG.QUERY; pkgData.CtrlHead.CMD_SET = (uint)E_CMD_SET.NET1; pkgData.CtrlHead.CMD_ID = HCCommand.DATA_WRITE; pkgData.CtrlHead.CE_ID = 0; Struct_FileHead fileHead = new Struct_FileHead(); fileHead.TriggerType = RecordTriggerType.Manual; fileHead.FileType = RecordFileType.Image; fileHead.RecordNO = recNo; fileHead.opFlag = 0; int pakDataLen = PAK_DATA_LEN; //每包数据长度,最大 506; byte[] pakBuffer = curBinaryReader.ReadBytes(pakDataLen); if (pakBuffer.Length <= PAK_DATA_LEN) { packID = 0xF0F0; //表示文件结束 } using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter bw = new BinaryWriter(ms)) { bw.Write(fileHead.Buffer); bw.Write(packID); //包序号,0x0000-0xF0EF,0xF0F0 表示最后一帧 bw.Write((ushort)pakDataLen); bw.Write(pakBuffer); } pkgData.PureData = ms.ToArray(); } pkgData.Pack(); SendData(pkgData); }
public void ReceiveDataWrite(DataPackage pkgData) { //收到数据【采集器→主机】 ushort packID = 0; Struct_FileHead fileHead = new Struct_FileHead(); byte[] dataBuffer = pkgData.PureData; using (MemoryStream ms = new MemoryStream(dataBuffer)) { using (BinaryReader br = new BinaryReader(ms)) { packID = br.ReadUInt16(); //包序号,0x0000-0xF0EF,0xF0F0 表示最后一帧 fileHead.Buffer = br.ReadBytes(4); //要读取文件的参数 if (macState == 1) { macState = 2; } } } if (packID < 0xF0F0) { //未结束,继续写入下一包数据 packID++; SendDataWrite(curRecNo, packID); } else { //结束,发送确认帧 if (macState == 2) { macState = 3; } SendDataACK(curRecNo); } }
public void ReceiveDataReadStream(DataPackage pkgData) { //收到实时码流数据【采集器→主机】 ushort packID = 0; Struct_FileHead fileHead = new Struct_FileHead(); byte[] readBytes = null; byte[] dataBuffer = pkgData.PureData; using (MemoryStream ms = new MemoryStream(dataBuffer)) { using (BinaryReader br = new BinaryReader(ms)) { fileHead.Buffer = br.ReadBytes(4); //要读取文件的参数 packID = br.ReadUInt16(); //包序号 int packDataLen = br.ReadUInt16(); //该包数据中图像数据长度,最大 506 字节。 readBytes = br.ReadBytes(packDataLen); } } if (readBytes != null && readBytes.Length > 0) { if (OnDataChanged != null) { //通知主程序处理实时码流数据 StreamHandlerEventArgs eventArgs = new StreamHandlerEventArgs(RunMode.Stream); eventArgs.OperState = OperationState.StreamReceiving; eventArgs.Buffer = readBytes; eventArgs.Value = null; //if (readBytes.Length == 12) //{ // //媒体流数据包包头,包含了时间戳以及数据流信息 // Struct_PacketHeader packetHeader = new Struct_PacketHeader(readBytes); // eventArgs.Value = packetHeader; //} //else //{ // File.WriteAllBytes("H:\\aa", readBytes); //} OnDataChanged(this, eventArgs); } } }