Indy10中执行TIdUDPClient.ReceiveBuffer出现Range Check Error问题 本人将代码从Indy9迁升到Indy10,但是在TIdUDPClient的ReceiveBuffer方法上报错(Range Check Error),请问大家是否也遇到这样的问题,有无解决办法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把你的代码贴出来,我用ReceiveBuffer没有出现问题。 测试代码很简单:客户端按钮事件,点击后发送消息给服务器端,然后等待接收数据,服务器端可成功接收,但是客户端接收报错。procedure TFrm_Client.Button1Click(Sender: TObject);var _AData: TBytes;begin uc.Send('Test!'); uc.ReceiveBuffer(_AData);end;服务器端将接收到的数据再返回给客户端。(AData换成其他TBytes类型的变量后客户端仍然接收报错,除非把AData改为nil,客户端才不报错。)procedure TFrm_Server.usUDPRead(AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle);begin Abinding.SendTo(Abinding.PeerIP, Abinding.PeerPort, AData);end;测试环境Win7 + Delphi2010 + Indy10.5.5,我在Win7 + Delphi2007 + Indy10.1.5以及WinXP +Delphi2010 + Indy10.5.5下测试问题依旧,不明白为何引起“Range Check Error”错误。 在发送SOCKET和接受SOCKET都需要判断接收和发送多长字节,你就uc.ReceiveBuffer(_AData);是有问题的。 接收之前先绑定端口uc.BoundPort := 9999; SetLength(_AData,5000); //长度随参数的变化而变化datalenth:=uc.ReceiveBuffer(_AData);//datalenth就是_AData实际收到的长度。tmpstr:=''; for I := 0 to length(_AData) - 1 do begin tmpstr:=tmpstr+char(strtoint(inttostr(StrToInt64('$'+inttohex(_AData[I],2))))); end; delphi多线程调用webservice的问题,非常着急。 如何批量保存WEB上的图片? 怎样将控件绑定到GRID? 请问ASP或者ASP.Net如何联接用Delphi开发的Midas应用服务器呢? ******高手来一下吧,关于日期时间相加的问题的***** 购卖了“installShield 2000 使用详解”一书,有问题请教 ★☆关于ActiveX中wideString的问题!高分求解!!!☆★ 如何比較時間大小 百思不得其解没办法只好问一下了很菜的问题关于字符串的 在DBGRID控件中的列头,能到达这种效果吗? 关于定义枚举的问题 求各位大侠,这段代码是什么意思?
客户端按钮事件,点击后发送消息给服务器端,然后等待接收数据,服务器端可成功接收,但是客户端接收报错。
procedure TFrm_Client.Button1Click(Sender: TObject);
var
_AData: TBytes;
begin
uc.Send('Test!');
uc.ReceiveBuffer(_AData);
end;服务器端将接收到的数据再返回给客户端。(AData换成其他TBytes类型的变量后客户端仍然接收报错,除非把AData改为nil,客户端才不报错。)
procedure TFrm_Server.usUDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
begin
Abinding.SendTo(Abinding.PeerIP, Abinding.PeerPort, AData);
end;测试环境Win7 + Delphi2010 + Indy10.5.5,我在Win7 + Delphi2007 + Indy10.1.5以及WinXP +Delphi2010 + Indy10.5.5下测试问题依旧,不明白为何引起“Range Check Error”错误。
uc.BoundPort := 9999;
datalenth:=uc.ReceiveBuffer(_AData);
//datalenth就是_AData实际收到的长度。
tmpstr:='';
for I := 0 to length(_AData) - 1 do
begin
tmpstr:=tmpstr+char(strtoint(inttostr(StrToInt64('$'+inttohex(_AData[I],2)))));
end;