注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

Raknet(1)——Startup  

2015-02-13 12:20:43|  分类: Socket |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
//转
开始Raknet

StartupResult RakPeer::Startup( unsigned short maxConnections, SocketDescriptor *socketDescriptors,unsigned socketDescriptorCount, int threadPriority );

第一件你应该做的事情是调用RakpeerInterface::StartUp()函数,Startup()函数将会:

1.生成RakNet Guid,一个RakpeerInterface的唯一实例,你可以通过下面函数得到这个Guid

RakNetGUID g = rakPeer->GetGuidFormSystemAddress( UNASSIGNED_SYSTEM_ADDRESS );

2.分配一组可靠的连接点,通过maxConnections参数定义,这个可能是你游戏中最大的玩家个数,你可能需要分配更多的连接点,手动的控制进入游戏的玩家。

3.通过socketDescriptors来创建1个或者多个Socket

在调用Startup()函数之前,通常只有原始的UDP函数可以使用,比如:Ping(), AdvertiseSystem(),SendOutOfBand().

maxConnections 参数

RakNet预先分配了连接到其他系统的内存,指定的maxConnections 参数作为在本RakPeerInterface实例和其他RakPeerInterface实例之间最大可支持的连接数(包含进出)。注意:如果你想让其他系统连接到你,你必须调用SetMaximunIncomingConnections( value )函数来设置最大进来的连接数,其中value参数不大于maxConnections值。

socketDescriptors 参数

在95%以上的情况下,你可以如下传递参数,

SocketDescriptor( MY_LOCAL_PORT, 0 );

对于MY_LOCAL_PORT 参数,如何想运行一个Server或者Peer,你必须为想要运行的Server或者Peer设置一个端口。这个是要传递给Connect()函数的 remotePort(远程端口)。如果要隐形一个客户端,你可以设置一个端口,或者设置为0,让系统自动选择一个没有用到的端口。注意:在Linux系统下设置1000一下的端口必须有管理员权限。尽管一些端口是保留的,但是无法限制你使用,但是请尽量不要使用。请查看:http://www.iana.org/assignments/port-numbers

通常你可以创建一组socket描述符。

SocketDescriptor sdArray[2];
sdArray[0].port=SERVER_PORT_1;
strcpy(sdArray[0].hostAddress, “192.168.0.1”);
sdArray[1].port=SERVER_PORT_2;
strcpy(sdArray[1].hostAddress, “192.168.0.2”);
if (rakPeer->Startup( 32, 30, &sdArray, 2 )
OnRakNetStarted();

此功能是给高级用户绑定多块网卡设定的功能.例如一块网卡绑定到到Lan后的安全服务器,而另外一块网卡绑定到到Internet,为了访问不同的绑定组,你可以穿衣绑定的索引值给有connectionSocketIndex参数的RakPeerInterface 函数。

IPV6是一个新的网络协议,代替了例如 94.198.81.195 这样的IP地址,你可以使用如fe80::7c:31f7:fec4:27de:14 的地址,4字节的编码方式被16字节的编码方式代替了,所以IPV6用于游戏上不太适合。从正面来说,因为有足够的地址,路由器不需要创建地址映射,所以IPV6不需要NAT穿透。

IPV6默认是不可用的,为了支持IPV6,可以设置 socket的族群为AF_INET6,例如:

socketDescriptor.socketFamily = AF_INET6;

IPV6只能连接其他IPV6 socket,同样的,默认的IPV4也只能连接到其他的IPV4 socket。

threadPriority (线程优先级)

对于windows操作系统,这个参数是RakPeer更新线程传递给_beginthreadex()函数的优先级。对于Linux系统,这个参数是传递给pthread_attr_setschedparam()函数,用于pthread_create()函数。默认的参数是 -99999,在windows上意味着使用优先级0(NORMAL_PRIORITY),而在Linux上意味着使用优先级为1000。在windows上默认的优先级就可以了,在Linux上,你需要设置该值为普通线程的优先级的值。
  评论这张
 
阅读(1363)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017