模拟器常见问题

各种不同模拟器的jar包可以互换使用么?


        理论上说同一版本内的都是可以相互互换兼容的。考虑到系统在不断调整和修改,因此最好使用安排好的jar包。

为什么模拟器总是登陆不上,提示验证无效?


        模拟器里面常见的配置参数有四个:enterprise_code、service_code、account和password。
        enterprise_code表示企业编号或者代码;serivce_code表示接入所使用的特服号(或者长号码);account是登陆所使用的帐号;password是登陆所使用密码。
        其中最容易弄混的是企业代码和登陆所使用的帐号。很多实际网关缺省认为企业编号或者代码就是登陆所使用的账户,其实更多情况下登陆帐户是独立设置的。模拟器缺省情况下并未设置成一致的数值,因此如果有登陆不上的问题,可以将登陆帐号修改成企业代码再测试登陆过程。

为什么华为的标准CMPP2.0 API总是链接不上模拟器,提示验证错误?


        经过反编译,发现华为smproxy.jar中的时间戳是一个写死的错误数值(“0008080808”,0x7b4da8),不符合CMPP/SMGP规范(月份数值为0,是无效数值)。模拟器会对这个错误数值进行自动修正。这样会导致MD5完全不一致。所以容易出现的一个现象就是能接入正式的华为网关(华为网关不验证timestamp的正确性),但是无法接入标准CMPP/SMGP模拟器。
        稍微对smproxy.jar中的CMPPConnectMessage.class和SMGPLoginMessage.class做了16进制编辑和修正后,这个API就可以连接模拟器了。修正后的API可以点击这里下载。不过这个API还存在其他一些问题,最稳妥的办法是使用SimpleTeam提供的CMPPAPI/SMGPAPI。

为什么亚信网关模拟器总是登陆不上,提示无效的版本号?


        亚信网关将版本号用于识别连接的功能类型。当版本号为0时表明是transmitter连接;当版本号为1时表明是receiver链接。真实的亚信网关会对其他非标准值都认为是transmitter连接;而亚信网关模拟器则认为其他版本号均无效。
        在过渡期完成后,真实的亚信网关已经放弃了原有的区分方式,而是采取分端口的方式来区分transmitter和receiver链接。此时应该选择收发分离模式的配置文件进行模拟。

配置文件中session的type为transmitter、receiver和transceiver是什么意思?


        transmitter是指session仅用于发送;receiver是指session仅用于接收;transceiver是指session同时用于收发。
        例如:按照CMPP标准协议,session是同时可以用于收发的,因此session的type一般配置为transceiver。按照SMPP标准协议,session的发送和接收功能是分开的,因此需要配置一个session的类型是transmitter,另外一个session的类型是receiver。
        很多情况下网关可以同时支持以上三种模式,因此可以根据实际需要配置。但是一般也遵守一个规则,即要么选择收发一体模式配置,或者选择收发分离的模式配置。不要随意混合搭配。

初次链接模拟器的时候返回链接满是什么意思?


        上面已经谈到了session配置的三种模式。如果客户端初次连接时,要求绑定没有配置的session类型,那么模拟器就会返回链接满的错误。
        例如:按照SMPP标准协议,模拟器配置了一个transmitter和一个receiver类型的session。如果客户端要求绑定transceiver类型时,系统就会提示链接满的错误。

使用彩信模拟器测试的时候,接收到的媒体文件会存放在什么地方?


        模拟器的确会保存这些媒体文件。一般会存放在模拟器工作目录的webpages\objects目录下。多媒体文件一般可以直接点击观看;对于文本文件会涉及编码问题,有可能需要转码后才可以正确浏览。

使用MM7Api连续发送彩信的时候,会出现一个成功一个失败间隔的情况,这个是什么原因?


        移动方面所提供的MM7Api可以支持短链接和长链接模式。这个模式配置在ConnConfig.xml中有一个KeepAlive项目。如果这个设置为on则表示使用长链接模式;如果这个设置为off则表示使用短链接模式。
        MM7Simulator目前的缺省配置是短链接模式。如果使用MM7Api的长链接模式和模拟器进行配合测试的时候,就会出现一个成功,一个失败相互间隔的情况。原因是因为MM7Api的连接池会选择已经关闭的链接来发送数据,因此肯定会导致IO错误。
        修改和调整的方法有两个,均可以有效解决测试中的问题:(1)将MM7Api设置为短链接模式;(2)将模拟器设置为长链接模式。
        为了将MM7Api设置为短链接模式,仅需要将ConnConfig.xml中的KeepAlive项目设置为off。再运行相关例程就会完全正常。
        为了将MM7Simulator设置为长链接模式,需要在session(type="server.transmitter")的属性里面增加一个keep="true"的属性。重新启动模拟器后,再运行相关例程就会完全正常。

彩信的发送速率主要取决哪些因素?


        除了取决程序的设计因素以外,另外一个主要因素就是带宽。
        假设一个彩信包平均是70KBytes,一秒一条。那么至少需要大约560Kbits的带宽。1Mbits的带宽也就能处理2条/秒。也就是说一个2Mbits的光纤,大致相当于250KBytes,大约只能承受每秒3~4条的流量。模拟器本地测试彩信的时候,速度可以到达60条左右,但是如果实际线路如此的话,估计带宽至少要达到30M的水平才可以。这么高的互联网带宽要求,成本就非常高了。