UE4 客户端与服务器的通信

英文原文文档连接地址:https://wiki.unrealengine.com/Third_Party_Socket_Server_Connection

翻译原文:转载自https://blog.csdn.net/or_7r_ccl/article/details/53308140#commentBox

 

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

创建Socket 

FSocket* Socket;
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;

//  这个是简单的消息的定义,在具体的游戏中要定义自己的消息格式.
// 此外 本人使用的skynet 服务器,socket在发送消息的使用,消息的前两位是消息的size.
// 所以具体的size = size + 2(这里只是记录一下,验证之后再做修改)

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

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

接受数据我们用到 HasPendingData Recv 函数,这两个函数在 FSocket 类中,具体实现可以参考下源码

在工程中引用Sockets模块,必要的时候还要引用Networking 模块.

PS:在添加Sockets.h,Networking.h 头文件的时候回出现,引用错误的情况,解决方案是,保存工程->关闭工程->重新生成工程->打开工程->build一下工程.

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

你可能感兴趣的:(UE4)