获得空闲端口

本文介绍了一个用于Delphi的函数GetFreePort,该函数能够查找并返回一个未被使用的端口。通过使用Winsock2库,此函数支持TCP和UDP协议,并能够从指定的起始端口号开始搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uses winsock2;
//获取一个空闲的端口
function GetFreePort(ABeginPort: Integer; const ATCP: Boolean = false): Integer;
var
 Wsd: TWSAData;
 S: Integer;
 SockAddr: TSockAddrIn;
begin
 Result := ABeginPort;
 if WSAStartup(MAKEWORD(2, 2), Wsd) <> 0 then
   Exit;
 try

   if ATCP then
     S := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
   else
     S := Socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

   if S = SOCKET_ERROR then
     Exit;

   SockAddr.sin_family := AF_INET;
   SockAddr.sin_addr.S_addr := inet_addr(pchar(GetIP(false)));
   SockAddr.sin_port := htons(ABeginPort);
   while bind(S, @SockAddr, SizeOf(SockAddr)) = SOCKET_ERROR do
   begin
     inc(ABeginPort);
     SockAddr.sin_port := htons(ABeginPort);
   end;
   closesocket(S);

 finally
   Result := ABeginPort;
 end;
end;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值