UE4之UDP通信

来源:互联网 发布:征服者更新用什么网络 编辑:程序博客网 时间:2024/06/07 18:49

UE4的Sockets模块封装了socket通信,以UDP通信为例说明如何在UE4中实现socket通信

class FUDPTest{private:FSocket* UdpSocket;public:void InitSocket(){FIPv4Address UdpAddr;FIPv4Address::Parse("127.0.0.1", UdpAddr);FIPv4Endpoint Endpoint(UdpAddr, 8001);//本机8001端口int32 BufferSize = 10240;//缓冲区大小,根据具体情况而定FUdpSocketBuilder SocketBuilder = FUdpSocketBuilder(TEXT("UDPSocket"));SocketBuilder.BoundToEndpoint(Endpoint);//绑定地址SocketBuilder.WithReceiveBufferSize(BufferSize);//设置缓冲区大小SocketBuilder.AsNonBlocking();//非阻塞UdpSocket = SocketBuilder;FTimespan Timespan = FTimespan::FromMilliseconds(100);//检查缓冲区间隔时间FUdpSocketReceiver* SocketReceiver = new FUdpSocketReceiver(UdpSocket, Timespan, TEXT("SocketReceiver"));SocketReceiver->OnDataReceived().BindRaw(this, &FUDPTest::OnUdpDataReady);//绑定接收回调函数SocketReceiver->Start();}//接收数据回调void OnUdpDataReady(const FArrayReaderPtr& ArrayReader, const FIPv4Endpoint& Endpoint){uint8* RecvData = ArrayReader->GetData();/*处理接收数据*/}//发送数据函数//ArraySend:需要发送的数据//RemoteIp:目的IP//RemotePort:目的端口void SendUdpData(const TArray& ArraySend,const FString& RemoteIp,int32 RemotePort){static TSharedPtrInternetAddr;if (!InternetAddr.IsValid()){InternetAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr();}bool bIsValid = false;InternetAddr->SetIp(*RemoteIp, bIsValid);InternetAddr->SetPort(RemotePort);int32 BytesSent = 0;UdpSocket->SendTo(ArraySend.GetData(), ArraySend.Num(), BytesSent, *InternetAddr);}};
需包含Sockets模块和相应的头文件

原创粉丝点击