Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[12868] [RFID] 가변데이터 송신 시 (클라이언트)
델파이 [] 2019 읽음    2009-08-20 10:13
rfid 장비(서버)에 ip와 port를 이용해 연결하면, 응답메시지가 전달되고 이를 잘 받았습니다.

그리고 클라이언트 측 프로그램에서 가변 데이터를 표준 규격에 맞게 보내면 응답메시지가 오는 것이 정상인데,

idTcpClient_1.WriteBuffer() 메소드를 쓰려고 하는데 맞는지요.


type
  TByteArray = array of Byte;

function LLRP_IMPINJ_ENABLE_EXTENSIONS(): TByteArray;
  var
    vData: TByteArray;
  begin
    SetLength(vData, 19);

    vData[0] := 7;            vData[1] := 255;          vData[2] := 0;
    vData[3] := 0;            vData[4] := 0;            vData[5] := Length(vData);
    vData[6] := 33;           vData[7] := 34;           vData[8] := 35;
    vData[9] := 36;           vData[10] := 0;           vData[11] := 0;
    vData[12] := 101;         vData[13] := 26;          vData[14] := 21;
    vData[15] := 0;           vData[16] := 0;           vData[17] := 0;
    vData[18] := 0;

    Result := vData;
  end;

procedure TForm1.tmr_StartTimer(Sender: TObject);
var
  vData: TByteArray;
  nCount, nUse, nAnt, i: Byte;
  strVData, strAnt: String;

begin
  nCount := 0;
  tmr_Start.Enabled := False;
  strVData := '';

  case m_nIndex of
    10:
      begin
        vData := LLRP_IMPINJ_ENABLE_EXTENSIONS();
      end;
    // 이하 생략......
    else;
  end;

  // vData에 어떤 값이 들어있는지 미리 화면에 출력 준비
  for i:=0 to Length(vData) - 1 do
    if i=0 then
      strVData := IntToStr(vData[i])
    else
      strVData := strVData + ', ' + IntToStr(vData[i]);

  ///// 출력 ////////////////////
  mm_ConnInfo.Lines.Add('[S] L(' + IntToStr(Length(vData)) + ') ' + strVData);

  if m_nIndex = 40 then
    begin
      bbtn_Start.Enabled := False;
      tmr_Start.Enabled := False;
      Exit;
    end;

  m_nIndex := m_nIndex + 10;

  Buff_Count:= vData[5];

  ////////// 데이터 송신 ////////////////////
  idTcpClient_1.WriteBuffer(vData, Length(vData)); // ◀◀◀ 바이트(배열)로 데이터를 송신 (가변임)

  tmr_Start.Enabled := True;
end;



응답메시지를 처리하는 부분은 쓰레드로 처리하기 때문에 정상이라 생각합니다. 처음에 ip와 port 연결을 시도할 때 서버(장비)로부터 데이터를 한번 수신받게 됩니다. 그래서 접속만 하고 바로 리시브 값을 받아 출력은 해놓은 상태입니다.(스레드)

값을 전송하고 응답 메시지가 있다면 이를 처리해야할 터인데 그렇지 못하고 바로 다음 두번째 값(케이스 문에서 10말고 20부터 또 vData 세팅을 함)을 전송하려 하는게 문제이고, 이때, WriteBuffer() 의 두번째 파라미터 값(사이즈)에 의해 소켓 에러 메시지가 뜹니다. Socket Error #10054 입니다.

조언 부탁드립니다~~

+ -

관련 글 리스트
12868 [RFID] 가변데이터 송신 시 (클라이언트) 델파이 2019 2009/08/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.