FlightGear飞行模拟器

标题: flightgear学习_多人飞行 [打印本页]

作者: zk_sima    时间: 2016-1-21 11:22
标题: flightgear学习_多人飞行
本帖最后由 zk_sima 于 2016-1-21 11:24 编辑

Flightgear多人飞行对应的参数是multiplay。
具体参数结构如下:
--multiplay=dir,freq,ip,port  --callsign=your_name
其中callsign代表自己的ID
官方文档上给出的例子是:
For two players on a local network or across the internet:
----------------------------------------------------------
Player1:--multiplay=out,10,192.168.0.3,5500 --multiplay=in,10,192.168.0.2,5501
--callsign=player1
Player2:--multiplay=out,10,192.168.0.2,5501 --multiplay=in,10,192.168.0.3,5500
--callsign=player2

For multiple players on a local network:
----------------------------------------
Player1:--multiplay=out,10,255.255.255.255,5500 --multiplay=in,10,255.255.255.255,5500
--callsign=player1
Playern:--multiplay=out,10,255.255.255.255,5500 --multiplay=in,10,255.255.255.255,5500
--callsign=playern

对于局域网内,2人联机飞行是没问题的,但是多人联机,通过广播的方式通信时会报错!!! 因为在程序内部不能对广播地址进行绑定。
所以文档上关于广播方式联机的例子是有误的。
原因在于,flightgear对于广播地址没有进行判断,直接按照常规地址进行绑定,所以会绑定失败。
对于局域网多人(至少3人)联机飞行,这里给大家提供3种方案:
1.自己单独在一台主机上搭建服务器,目的很简单:数据转发。 所有联机的客户机把--multiplay=out,10,server_ip,5501中的地址设为服务器地址。服务器则把收到的数据发给所有的客户机。
2.通过组播方式进行通信,虽然flightgear(实质是simgear)没有对广播进行特殊处理,但是它能识别组播地址。
3.修改flightgear程序。
对于广域网多人联机飞行,由于路由器一般不支持广播和组播,因此这里提供2中方案:
1.使用flightgear提供的在线服务器,连上去即可
2.自己搭建服务器(思路与局域网方案1一致),但是服务器需要固定IP

下面来分析如果修改flightgear程序来达到联机飞行的目的:
multiplay主要是有FGMultiplayMgr子系统来管理的,根据前面分析,对于子系统的处理主要是以下几个过程:
bind()
init()
update()
shutdown()
FGMultiplayMgr的重点是init:
init进行以下几个处理:
mSocket.reset(new simgear::Socket());
mSocket->open(false)
mSocket->setBlocking(false);
mSocket->bind(rxAddress.c_str(), rxPort)
这几个处理没有判断地址的类型,因此在bind阶段就会出现广播地址绑定失败!
为了解决这个问题,可以把以上过程改成以下过程:
mSocket.reset(new simgear::Socket());
mSocket->open(false)
mSocket->setBlocking(false);
mSocket->setBroadcast(true);
mSocket->bind(“0.0.0.0.”, rxPort)


END
By:zk_sima
email:zk.sima@gmail.com


作者: goodman11011011    时间: 2016-1-22 11:06
绝对好帖,我试了广播模式,绑定不了,一直找不到原因,今天终于释疑了
作者: wanghaitao    时间: 2016-4-3 23:23
非常感谢!!!!:):):)
作者: boyblog    时间: 2017-2-19 20:35
非常感谢楼主的介绍!!!!
作者: FGwhite    时间: 2018-7-25 09:31
感谢楼主。第一次接触FlightGear,还有很多要学
作者: FGwhite    时间: 2018-7-25 09:32
非常感谢楼主。第一次接触FlightGear,还有很多要学。
作者: FGwhite    时间: 2018-7-25 09:32
非常感谢楼主。第一次接触飞行模拟器,还有很多要学。
作者: shark1986    时间: 2019-1-8 11:22
收藏学习了,感谢分享!!!!!!!!




欢迎光临 FlightGear飞行模拟器 (https://www.flightgear.org.cn/) Powered by Discuz! X3.2