Delphi TIdUDPClient广播错误的数据
我使用Delphi 6和Indy 8通过UDP从电子板发送和接收消息。但是自从更新到Delphi XE4之后,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#$
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代码中也应该这样做):