现在的位置: 首页 > 综合 > 正文

Twing Hot Link For PSP 开发笔记(1)

2012年10月23日 ⁄ 综合 ⁄ 共 1744字 ⁄ 字号 评论关闭
在今年年前的时候,由于想和朋友联机玩PSP游戏(MHP3),但是又不想花钱去买盟卡或者其他的PSPXLink的网卡,所以决定自己研究下开发PSP联机软件的可行性。
下载了目前网络上比较流行的联机软件,MengZone,然后安装并对他进行分析,其中发现最关键的是安装目录下有一个WinPcapDll.dll的库。因为之前对WinPcap有所了解,知道他可以用来捕获网卡的网络数据,然后MengZone又推出了一个USB联机功能,我便去查询了下进行USB联机所需要的那一款PSP插件,ADHocToUSB,他的作用是将PSP本身通过无线网卡发送的数据截获,然后通过USB传给PC,PC端还需要运行一个软件,Bridge,用来做网卡桥接,这样,就可以将USB传送过来的数据发向网卡(或反向发送),那么,理论上,就可以用WinPcap进行捕获并处理了(通过Internet传送给其他的PC)。

 

 

分析到了这里,就直接开始编写代码进行测试,我采用的编程语言是C#,所以找到了一个WinPcap的托管类库:Pcap.net,功能非常强大,而且刚好满足我的需求。整个软件开发要用到的第三方类库也只有这一个。
经过简单的测试,PSP游戏数据捕获成功,但是中途遇到了几个问题,第一个是通过Pcap.Net捕获到的数据是双向的,也就是发送出去和接受到的都捕获了,而我仅仅需要捕获的是由PSP发送到PC的数据,否则,整个软件就不能正常运行,于是看了下Pcap.NET的源代码,其中有一个PacketDeviceOpenAttributes.NoCaptureLocal,尝试加入这个参数,问题解决。第二个问题,Windows本身可以建立一个叫Microsoft Loopback Driver的虚拟网卡,专门用来做测试的,可以利用他做PSP专用数据网卡,但是这样做,会额外增加软件的设置负担,导致不太懂电脑的人完全不能用这个软件,所以,最好还是使用当前的网卡,不过WinPcap会捕获到所有通过该网卡的网络数据(这里说一个题外话,目前国内一些流行的P2P控制软件,比如P2P终结者,聚生网管等,也是利用WinPcap来做ARP欺骗的,WinPcap捕获到网络封包后,可以修改并伪造封包数据),这就需要用到WinPcap的封包过滤功能(别去判断封包来源的Mac地址,这样效率很低,对于PSP游戏这种数据量相当大的情况,会出现相当严重的运行效率问题),于是,又用到了Google(查询的时候,保证关键字的精确以提高你的命中率,开发人员一定要活用Google),在SONY的官方网站的一个白皮书里面查到了PSP的网络协议,叫是 Sony Computer Entertainment Inc,代码是:88C8,所以,通过一句简单的:communicator.CreateFilter("ether proto 35016"),即可创建一个封包过滤器,至此,PSP游戏数据的获取大功告成。
接下来,是处理网络。由于没有服务器(也不打算做服务器),于是,软件既是服务器,也是客户端,可以选择建立主机,也可以通过公网IP地址加入其他已经建立的服务器,这里的网络处理需要考虑防火墙的问题(大多数PC机都位于防火墙内,直接采用ADSL上网的则无需考虑此问题),所以,需要有防火墙穿透功能(此功能需要一个第三方服务器做中转,虽然实现了防火墙穿透,但是也没有利用起来)。另外,PSP游戏的数据量相当的大,发送也相当频繁(平均15kb/S左右),我采用的方式是所有客户端(包括做为服务器方本身)将数据发送到服务器端,服务器端再转发给除了发送方本身外的其他客户端,所以作为服务器的一方,带宽成了瓶颈,这个问题通过技术手段难以解决,虽然考虑使用P2P的那种数据传输方式可以缓解,但是对于数据处理来说,工作量就相当大了。这里还是把我考虑的另外一种数据传输方式说一下。
第一种方式:

 

第二种方式:

 

从上面的图可以看到,对于主服务器的带宽压力明显减小,理论上来说,第一种方式服务器需要6M带宽才能基本保证4人联机的流畅度,第二种方式则大概要3M带宽即可(每个客户端)。但是第一种方式对于非服务器的客户端来说,只需要2M带宽即可。
To be continue......

抱歉!评论已关闭.