客户端服务器运作
为了连接到所述客户端的服务器必须有一个NetServer对象. NetServer对象添加到之前建立的服务器中. 在服务器上写ProudNet服务器库参考Visual C++ 项目设置
class SimpleServer { shared_ptr<CNetServer> m_netServer; ... |
然后, 开始一个NetServer对象在SimpleServer.Run函数中. m_netServer = shared_ptr<CNetServer>(CNetServer::Create()); |
之后,启动服务器调用调用NetServer.Start函数. 此函数功能是,作为服务器角色来接收客户端的连接. CStartServerParameter startConfig; startConfig.m_protocolVersion = g_protocolVersion; startConfig.m_tcpPorts.Add(g_serverPort); startConfig.m_udpPorts.Add(g_serverPort); startConfig.m_allowServerAsP2PGroupMember = true; // [1]
m_netServer->Start(startConfig); |
客户端输入的服务器端口值和版本进行一致处理. Guid g_protocolVersion = Guid::From({ 0x107b3b66, 0xb7de, 0x4091,{ 0xa5, 0xba, 0x72, 0xca, 0x1a, 0xf5, 0x1a, 0xbc } });
int g_serverPort = 35475; |
NetServer不同与NetClient没有FrameMove函数. 存在一个单独的线程池来接收消息或者处理事件. (注: 像NetClient一样运作,设置多种线程模型,改变线程个数等方法) 进行如下操作,当服务器收到客户端的连接时调用NetServer.OnClientJoin函数. 客户端断开时调用OnClientLeave函数. m_netServer->OnClientJoin = [](CNetClientInfo* info) { cout << "Client " << info->m_HostID << " joined.\n"; };
m_netServer->OnClientLeave = [this](CNetClientInfo* info, ErrorInfo*, const ByteArray&) { cout << "Client " << info->m_HostID << " went out.\n"; } |
输出参数info中包含客户端的信息. Info的成员变量HostID是, 连接到服务器的每个客户端的唯一标识符. 现在,让我们开启服务器,运行客户端. 如果,客户端连接服务器成功的话登陆界面会自动消失.
第四篇:Unity结合C++开发服务器实现多人游戏(四) |