虚幻Send UDP功能函数
bool UUDPBlueprintLibrary::SendUDP(const FString& Message, const FString& IPaddress, const int32 port)
{
// 创建一个 UDP 套接字
FSocket* UDPSocket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_DGram, TEXT("MyUDPSocket"), false);
if (!UDPSocket)
{
UE_LOG(LogTemp, Error, TEXT("Failed to create UDP socket"));
return false;
}
// 解析目标 IP 地址
FIPv4Address TargetAddress;
if (!FIPv4Address::Parse(IPaddress, TargetAddress))
{
UE_LOG(LogTemp, Error, TEXT("Invalid IP address: %s"), *IPaddress);
UDPSocket->Close();
ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->DestroySocket(UDPSocket);
return false;
}
UDPSocket->SetReuseAddr(true);
TSharedPtr<FInternetAddr> InternetAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr();
InternetAddr->SetIp(TargetAddress.Value); // 使用解析后的 IP 地址
InternetAddr->SetPort(port);
// 将 FString 转换为字节数组
TArray<uint8> MessageBytes;
FTCHARToUTF8 UTF8Converter(*Message);
MessageBytes.Append((const uint8*)UTF8Converter.Get(), UTF8Converter.Length());
int32 BytesSent = 0;
// 发送数据
bool bSuccess = UDPSocket->SendTo(MessageBytes.GetData(), MessageBytes.Num(), BytesSent, *InternetAddr);
if (bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Sent %d bytes to %s:%d"), BytesSent, *IPaddress, port);
}
else
{
UE_LOG(LogTemp, Error, TEXT("Failed to send UDP message"));
}
// 关闭套接字
UDPSocket->Close();
ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->DestroySocket(UDPSocket);
return bSuccess;
}
浙公网安备 33010602011771号