游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2576|回复: 0

Unity结合C++开发服务器实现多人游戏(三)

[复制链接]

29

主题

38

帖子

384

积分

中级会员

Rank: 3Rank: 3

积分
384
QQ
发表于 2017-2-16 17:30:59 | 显示全部楼层 |阅读模式
客户端服务器运作

为了连接到所述客户端的服务器必须有一个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++开发服务器实现多人游戏(四)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 00:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表