2013-07-26 32 views
0

我使用Delphi 6(Indy 8.)通過UDP發送來自電子板的接收消息。但是,因爲我嘗試使用delphi XE4,該組件發送錯誤的數據包,我認爲問題是與發送函數只發送unicode。是否可以通過該過程發送ANSIString(Tidudpclient.send())? 這裏是我使用的代碼: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中,字符串是Unicode,而Indy的默認編碼是ASCII。您的String數據包含超出ASCII範圍的字符。

請勿將String用於二進制數據。這不是它的意思。你可以在Delphi 2007中早一點脫身,但在Delphi 2009及之後的版本中則沒有。

您可以:

  1. 繼續使用Send(),但告訴它,而不是使用Indy的默認編碼Indy的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(),而不是(你應該做的,即使在你的Indy 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;