Q&A

  • 파일을 나눠서 받는데 어떤 오류가 있는지 궁금해서요
파일 수신 서버를 구성하고 있습니다
인디를 이용하고 있구요
단말기에서 넘어오는 파일의 크기가 대략 5K 조금 넘습니다
그래서 단말기에서는 1024 Byte로 잘라서 파일을 전송합니다
각각 전송할때마다 CRC 값을 체크 해서 서버에서 단말기로 다음 패킷요청을 해야지 단말기에서 다음 패킷을 전송하는데
아래와 같이 구성해 봤는데 파일이 넘어오다가 멈춰버리는거 같아서요..
어떤 오류가 있는지 고수님들이 지적좀 해주세요


type
  FILE_DATA_PACKET = Packed Record
      STX : Byte;
      PID : Byte;
      CURSEQ : Array[1..2] of Byte;
      DATA : Array[1..1024] of Byte;
      CRC : Byte;
      ETX : Byte;
end;

type
  FILE_COMMAND_PACKET = Packed Record
      STX : Byte;
      PID : Byte;
      CMD : Byte;
      ETX : Byte;
end;
                COMMAND_PACKET.STX := $02;
                COMMAND_PACKET.PID := $f2;
                COMMAND_PACKET.CMD := $41;     // 패킷 전송 요구
                COMMAND_PACKET.ETX := $03;

                AThread.Connection.WriteBuffer(COMMAND_PACKET , SizeOf(COMMAND_PACKET),true);

                Total_Cnt := 0;

                For i := 1 To 6 Do Begin

                        AThread.Connection.ReadBuffer(DATA_PACKET , SizeOf(DATA_PACKET));

                        // 1024 Byte로 넘어오기 때문에 총괄 버퍼에 이전시켜놈
                        For j := 1 To 1024 Do Begin
                            Total_Buffer[Total_Cnt] := DATA_PACKET.DATA[j];
                            Inc(Total_Cnt)
                        End;

                        If Not func_TempSum Then Begin   // CRC 체크

                            COMMAND_PACKET.STX := $02;
                            COMMAND_PACKET.PID := $f2;
                            COMMAND_PACKET.CMD := $51;     // CRC 값이 안맞을경우 전송실패 패킷 전송
                            COMMAND_PACKET.ETX := $03;

                            AThread.Connection.WriteBuffer(COMMAND_PACKET , SizeOf(COMMAND_PACKET),true);
                            AThread.Terminate;
                            Exit;

                        End;

                       // 1k 씩 끊어서 전송하므로 다음 패킷을 요구해야함.

                        COMMAND_PACKET.STX := $02;
                        COMMAND_PACKET.PID := $f2;
                        COMMAND_PACKET.CMD := $41;     // 다음 패킷 전송 요구
                        COMMAND_PACKET.ETX := $03;

                        AThread.Connection.WriteBuffer(COMMAND_PACKET , SizeOf(COMMAND_PACKET),true);
                End;

                FStream := TFileStream.Create(SavePath , fmCreate  or fmShareExclusive);
                FStream.Write(Total_Buffer , SizeOf(Total_Buffer));
0  COMMENTS