本文简单分析一下ue4在局域网内加入游戏的流程。
ue4游戏中,会列出局域网内所有服务器的基本信息,玩家可以选择一个加入游戏。
加入游戏使用udp协议,具体协议格式如下:
<Ver byte><Platform byte><Game unique 4 bytes><packet type 2 bytes><nonce 8 bytes><payload>
字节1:版本号
字节2:平台类型
字节3-6:游戏唯一标识
字节7-8:包类型
字节9-16:客户端唯一标识随机数
后面还可跟一些其他数据
使用的协议有如下两个:
DEFINE_ONLINE_DELEGATE_THREE_PARAM(OnValidQueryPacket, uint8*, int32, uint64);
DEFINE_ONLINE_DELEGATE_TWO_PARAM(OnValidResponsePacket, uint8*, int32);
协议OnValidQueryPacket:用于客户端向局域网内的服务器请求服务器信息
协议OnValidResponsePacket:用于服务器向客户端返回服务器信息
我们可以在以下函数看到两个协议的处理过程
void FOnlineSessionNull::OnValidQueryPacketReceived(uint8* PacketData, int32 PacketLength, uint64 ClientNonce)
void FOnlineSessionNull::OnValidResponsePacketReceived(uint8* PacketData, int32 PacketLength)
具体过程很简单,客户端向局域网广播OnValidQueryPacket消息,服务器收到该消息向客户端返回OnValidResponsePacket消息,客户端收到来自不同服务器的OnValidResponsePacket消息,把收到的服务器信息加到一个列表中,并显示出来
以上过程主要涉及到的源码为 LANBeacon.h/cpp和OnlineSessionInterfaceNull.h/cpp文件