UE4 连接自定义服务器

389 篇文章 17 订阅
29 篇文章 0 订阅

UE4 连接自定义服务器

在虚幻引擎中连接自定义服务器

 
UE4 dedicated server是一个很好的游戏服务器,但是对于大厅和聊天服务器来说,我们要自行开发,通过UE4的socket组建很方便的和其他服务器建立连接

创建Socket

FSocket* Socket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_Stream, TEXT("default"), false);

CreateSocket参数

  1. 类型
  2. 描述
  3. 是否强制UDP

 

设置地址

FString address = TEXT("127.0.0.1");
int32 port = 19834;
FIPv4Address ip;
FIPv4Address::Parse(address, ip);


TSharedRef addr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr();
addr->SetIp(ip.GetValue());
addr->SetPort(port);

 

连接服务器

 

bool connected = Socket->Connect(*addr);

如果返回True说明连接服务器成功.

 

发送消息


FString serialized = TEXT("loadPlayer|1");
TCHAR *serializedChar = serialized.GetCharArray().GetData();
int32 size = FCString::Strlen(serializedChar);
int32 sent = 0;

 

发送内容FString转换成TCHAR*,格式化发送数据

bool successful = Socket->Send((uint8*)TCHAR_TO_UTF8(serializedChar), size, sent);

接受数据我们用到 HasPendingData 和Recv 函数在 FSocket 类中.

在工程中引用Sockets模块

PublicDependencyModuleNames.AddRange(
   new string[]
   {
      "Core",
      "CoreUObject",
      "Engine",
      "Sockets"
   }
);

 

在Unreal Engine (UE) 5中搭建WebSocket连接通常涉及到使用第三方插件或者自定义网络代码。UE5本身并不直接支持WebSocket,因为其内置的是基于UDP和TCP的传统网络系统。以下是使用插件和自定义方案的一般步骤: 1. **使用插件**: - Unreal OnlineSubsystem:这是一个官方推荐的在线服务框架,其中包含了对WebSocket的支持。通过它,你可以创建一个WebSocket服务器,或者集成到现有的游戏会话中。首先,需要下载并启用OnlineSubsystem模块,然后按照文档配置WebSocket服务器地址和端口。 2. **自定义代码**: - 如果不想依赖插件,可以考虑使用像`THttpModule`这样的基础HTTP模块,结合第三方库(如WebSocket++或Ratchet)来实现WebSocket通信。你需要编写C++代码来处理连接、消息传递等操作,并在蓝图或代码中设置适当的回调。 3. **建立连接**: - 在客户端,你可以使用UE5的 Networking API(比如FNetworkManager或FNanoHTTPClient)来发起WebSocket连接请求。创建一个HTTP请求,指定WebSocket URL,然后监听ConnectSuccess或ConnectFailed事件。 4. **数据传输**: - 连接成功后,就可以发送和接收JSON格式的数据了。将数据序列化为字符串,添加到WebSocket帧中发送,同时解析接收到的帧解包数据。 ```cpp // 示例代码片段 TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL("ws://yourserver.com/endpoint"); HttpRequest->OnProcessComplete().BindLambda([this](FHttpRequest* Request, FHttpResponsePtr Response) { if (Response->HasSucceeded()) { UE_LOG(LogTemp, Warning, TEXT("WebSocket connected!")); // 这里可以继续设置WebSocket的发送和接收逻辑 } else { UE_LOG(LogTemp, Error, TEXT("WebSocket connection failed: %s"), *Request->GetContentAsString()); } }); HttpRequest->SetVerb(TEXT("GET")); // 或者改为 "CONNECT" for WebSocket HttpRequest->AddHeader(TEXT("Upgrade"), TEXT("websocket")); HttpRequest->AddHeader(TEXT("Connection"), TEXT("Upgrade")); HttpRequest->AddHeader(TEXT("Sec-WebSocket-Key"), TEXT("your-key-string")); // 需要根据协议生成 HttpRequest->Send(); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值