Delphi TIdUDPClient广播错误的数据

Delphi TIdUDPClient广播错误的数据,delphi,indy,delphi-xe4,Delphi,Indy,Delphi Xe4,我使用Delphi 6和Indy 8通过UDP从电子板发送和接收消息。但是自从更新到Delphi XE4之后,TIdUDPClient组件发送错误的数据包。我认为问题在于Send()函数只以Unicode格式发送。是否可以通过TIdUDPClient.send()发送AnsiString 以下是我正在使用的代码: idudpclient1.Send(#$7e#$b8#$c7#$81#$10#$8d#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$

我使用Delphi 6和Indy 8通过UDP从电子板发送和接收消息。但是自从更新到Delphi XE4之后,
TIdUDPClient
组件发送错误的数据包。我认为问题在于
Send()
函数只以Unicode格式发送。是否可以通过
TIdUDPClient.send()发送
AnsiString

以下是我正在使用的代码:

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);

您正在以
字符串的形式发送二进制数据。在XE4中,字符串是Unicode,Indy的默认编码是ASCII。
字符串
数据包含ASCII范围之外的字符

不要对二进制数据使用
String
。这不是它的目的。您可以在Delphi2007或更早的版本中解决这个问题,但不能在Delphi2009或更高版本中解决

您可以:

  • 继续使用
    Send()
    ,但告诉它使用Indy的8位编码而不是Indy的默认编码:

    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);
    
  • 改为切换到
    SendBuffer()
    (即使在Indy 8代码中也应该这样做):


  • 您正在以
    字符串的形式发送二进制数据。在XE4中,字符串是Unicode,Indy的默认编码是ASCII。
    字符串
    数据包含ASCII范围之外的字符

    不要对二进制数据使用
    String
    。这不是它的目的。您可以在Delphi2007或更早的版本中解决这个问题,但不能在Delphi2009或更高版本中解决

    您可以:

  • 继续使用
    Send()
    ,但告诉它使用Indy的8位编码而不是Indy的默认编码:

    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);
    
  • 改为切换到
    SendBuffer()
    (即使在Indy 8代码中也应该这样做):