需求说明:
在项目开发时,由于需要使用UDP同时接收多个数据来源,所以存在端口占用的可能性,因此需要在创建UDP前,先检测端口是否被占用,否则,就会引起软件功能报错或者崩溃。
解决方案:
如果方法返回true,代表端口可用,反之则不可用。
bool UMyUDPBPFunctionLibrary::IsPortAvailable(int Port)
{
FIPv4Endpoint Endpoint(FIPv4Address::Any, Port);
FSocket* Socket = FUdpSocketBuilder(TEXT("UdpPortCheck"))
.AsReusable()
.BoundToEndpoint(Endpoint)
.Build();
bool bCanBind = Socket != nullptr; // 检查套接字是否创建成功
if (Socket)
{
Socket->Close();
ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->DestroySocket(Socket);
}
return bCanBind;
}