客户端服务器运作
为连接到所述客户端的服务器必须有一个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是,连接到服务器的每个客户端的唯一标识符.
现在,让我们开启服务器,运行客户端.
如果,客户端连接服务器成功的话登陆界面会自动消失.