idudpserver控件如何得到一个空闲端口? (100分)

  • 主题发起人 主题发起人 tonywell
  • 开始时间 开始时间
T

tonywell

Unregistered / Unconfirmed
GUEST, unregistred user!
如果idudpserver使用的端口与其他端口相冲突,就会出错阿,怎么找到一个空闲端口?
 
怎么没人回答?急阿,拜托各位了
 

function NewUdpPort(udp:TNMUdp):integer;
var
gsin:TSOCKADDRin;
// udptmp:TNMUdp;
begin
// udptmp:=tnmudp.Create(nil);
gSIN.SA_FAMILY:=2;//udp
gsin.sin_addr.s_un_b.s_b1:=#127;
gsin.sin_addr.s_un_b.s_b2:=#0;
gsin.sin_addr.s_un_b.s_b3:=#0;
gsin.sin_addr.s_un_b.s_b4:=#1;
Result:=8000;
while true do
begin
gsin.sin_port:=htons(Result);
if bind(udp.ThisSocket,gsin,SIZEOF(gSIN))<>0 then
inc(Result)
else
Break;
end;

// udptmp.Free;
// udp.LocalPort :=Result;
end;
这是从我以前程序中COPY出来的,你看着改一下就可以了

 
for port:=n to m DO
循环打开port没有冲突就行拉
 
var
BindPort: Integer;
begin
IdUDPServer1.Bindings.Add;
BindPort:=7;
while True do
begin
try
IdUDPServer1.Bindings[0].IP:='0.0.0.0';
IdUDPServer1.Bindings[0].Port:=BindPort;
IdUDPServer1.Active:=True;

break;
except
on E: EIdCouldNotBindSocket do
Inc(BindPort);
end;
end;

ShowMessage('你绑定的端口为 '+InttoStr(BindPort));
end;
 
接受答案了.
 
后退
顶部