b、投票选举阶段。每台计算机倒计时结束之后,会在[1-10000]之间,随机生成一个数字,并打包到待传送的包里,发送给其他每台计算机,这样,每台计算机都会收到其他计算机随机生成的数字以及自己随机生成的数字。然后每台计算机就开始比较大小,选出数字最大的包,并把该包以及所有的随机数包,再次发送给其他计算机(由于每台计算机收到的所有随机数都一样,所以比较过后,数字最大的包也是一样的),并告知所有电脑,该数字最大的包的计算机就是该游戏的MASTER(发起者)。
选举阶段的防作弊措施:由于分布式计算机的并发性,为了防止某些计算机私自改写自己随机数,给分布式造成混乱,这里预想以及编写了两种作弊情况的处理:
第一种,选举结果不一致。当每台计算机选举出了最大的数字包之后,且收到其他计算机发来的选举结果和数字包,就开始对比,如果有结果不一致的选举结果,将该发送者的所有数据都抛弃,这样防止了私自篡改master选举结果;
第二种,随机数值不一致。当每台计算机都选举出了master之后,会把所有的数字包再发送给其他计算,这时,进行包的对比,当发现所有的数字包里,有不一致的数字,将该发送者的所有数据都抛弃,这样防止了某些计算机私自修改随机数,导致master的选举结果不一致。
这时,游戏的等待开始阶段基本完成,完成了MASTER推举的计算机都进入游戏开始阶段。
(4)游戏开始阶段:通过比较随机数大小,选举出了MASTER,进行广播之后,每台计算机都检测是不是本机被选中,如果不是本机,就进入待机状态,等待MASTER制定游戏规则和游戏顺序,如果是本机,就开始制定游戏规则,设定总时间(在0—100秒之间随机抽取)。
为了增加该分布式程序的人机交互性,游戏顺序采用人工设定的方法,程序员自己键入确定游戏顺序,比如有号码为1,2,3的三台计算机,程序员可以自己设定顺序为,3-1-2。然后MASTER收到该顺序之后,再把该顺序和游戏总时间一起发送给其他计算机,其他计算机收到所有游戏规则之后,开始确认自己上一台计算机和下一台计算机(也就是自己的游戏顺序)。
每台计算机确认自己的游戏顺序完毕之后, 开始进入游戏阶段。
(5)游戏阶段:程序员设定的第一台计算机自动开始游戏,开始消耗游戏总时间,这里,为了继续增加人机交互性,程序员可以自主决定每台计算机游戏多少时间(当程序按下“enter”键之后,该游戏中的计算机游戏停止,并显示“req_pass”和剩余总时间“left”,并按顺序传给下一台计算机,传送过程中不消耗总时间,当下一台计算机接受到游戏包,马上开始游戏,并继续消耗“left”剩余总时间),每台计算机就按照这个方式完成所有游戏过程,直到游戏总时间结束。当游戏总时间<0时,游戏包停留在哪台计算机,该计算机就成为胜利者,至此,游戏结束。游戏结束时,程序中显示出“TIME USED UP IN YOUR TURN, GAME OVER”,并将该游戏结果通知给其他所有计算机。
当其他计算机收到游戏结束的包时,该分布式程序就结束了。
至此,该毕设课题——简易分布式程序,所有功能都已运行完毕。