2013-07-26 1 views
0

Delphi 6 (Indy 8.)을 사용하여 UDP를 통해 전자 보드에서 수신 메시지를 보내고 있습니다. 하지만 내가 델파이 XE4를 사용했기 때문에 그 구성 요소가 잘못된 데이터 패킷을 보냈다. 문제는 송신 기능 만이 유니 코드로 전송한다고 생각한다. 그 절차 (Tidudpclient.send())를 통해 ANSIString을 보낼 수 있습니까?Tidudpclient가 잘못된 데이터를 브로드 캐스트합니다.

idudpclient1.Send(#$7e#$b8#$c7#$81#$10#$8d#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$9d#$02#$0d); 

답변

1

당신은 String으로 바이너리 데이터를 전송하는 : 여기 내가 사용하고 코드입니다. XE4에서 문자열은 유니 코드이고 인디의 기본 인코딩은 ASCII입니다. String 데이터에 ASCII 범위 밖에있는 문자가 포함되어 있습니다.

이진 데이터에 String을 사용하지 마십시오. 그것이 의미하는 바가 아닙니다. Delphi 2009에서 이전 버전을 사용할 수 있지만 Delphi 2009 이상에서는 사용할 수 없습니다. 하나

당신은 할 수 있습니다

  1. Send()을 계속 사용하지만, 대신 인디의 기본 인코딩의 인디의 8 비트 인코딩을 사용하도록 알려주기 :

    IdUDPClient1.Send(#$7e#$b8#$c7#$81#$10#$8d#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$9d#$02#$0d, Indy8BitEncoding); 
    
  2. 스위치 대신 SendBuffer()에 (당신이해야하는 , 심지어 귀하의 인디 8 코드에서) :

    var 
        Buf: TIdBytes; 
    begin 
        SetLength(Buf, 34); 
        FillBytes(Buf, 34, $00); 
        Buf[0] := $7e; 
        Buf[1] := $b8; 
        Buf[2] := $c7; 
        Buf[3] := $81; 
        Buf[4] := $10; 
        Buf[5] := $8d; 
        Buf[31] := $9d; 
        Buf[32] := $02; 
        Buf[33] := $0d; 
        IdUDPClient1.Send(Buf); 
    end;