我正在Delphi 7中创建一个程序,它从服务器(不是我的)发送和接收数据包。它发送数据包,等待接收数据包,然后读取它。所有这些过程都正常工作,但是当我循环sendPacket过程(我需要做)时,它冻结并给出套接字错误10053.我认为这是因为服务器拒绝请求,因为在短时间内发送了太多的数据包时间是否多次同时发送数据包?我已经尝试在发送数据包后放入Sleep(1000)。
问题:如何限制将要发送的数据包数量,或者一次发送多少数据包?
begin
if pack[1]='bf'
then
if pack[3]='-1'
then
Label2.Caption:='Not Found'
else
begin
found:=true;
while found=true do
begin
Pickle.sendPacket('%xt%s%u#bf%'+Pickle.intRoom+'%122868290%');
room:= pack[3];
Label2.Caption:='Found at the '+room;
if room = '-1'
then
begin
Label2.Caption:='Left the server';
found:=false;
end;
end;
end;
end;
答案 0 :(得分:3)
在pack [3]包含-1之前,代码中的以下循环不会被保留。
while found=true do
begin
Pickle.sendPacket('%xt%s%u#bf%'+Pickle.intRoom+'%122868290%');
room:= pack[3];
Label2.Caption:='Found at the '+room;
if room = '-1'
then
begin
Label2.Caption:='Left the server';
found:=false;
end;
end;
未显示pack [3]的设置位置。您应该将代码移动到接收事件中,而不进行循环。
答案 1 :(得分:0)
了解您需要更新的频率,并仅在需要时发送数据包。
例如,仅在当前房间更改时发送数据包。如果房间保持不变,为什么要一次又一次地发送?
如果要以指定的间隔发送更新,请在每个周期使用Sleep(25);
。