DotMSN机器人自动掉线的问题

使用DotMSN来开发MSN机器人,机器人在一段时间里如果没有接收到任何会话请求时,经常会自动断线 。而且这个连接断线是没有响应任何事件的,而且Connected是True,Owner.Status也是正常的,这不得 不让人头痛啊。

经过查阅一些资料,发现只要定时向MSN服务器发送Ping命令,以保持客户端与服务器的连接,即可解 决这个问题。但是问题是DotMSN里提到的SendPing()方法它并没有提供啊!?可以查找到MSNP协议里头, 发送Ping命令是通过PNG\r\n。但是如何来发送是一个问题了。

最初的想法是构建一个NSMessage对象,由NameserverProcessor.SendMessage方法来发送。使用代码 如下:

1: void SendPing()
2: {
3: NSMessage message = new NSMessage("PNG\r\n", new string[] { });
4: messenger.NameserverProcessor.SendMessage(message);
5: }

但是每当我发送一个Ping命令后,虽然PingAnswer事件会被触发,也就是服务器有响应了,Ping命令 发送成功。但是同时我的登录也会被服务器踢出,SignedOff事件被触发了。在仔细查阅了NSMessage信息 对象的定义后发现,这个对象构建的发送字节除了命令本身还会有空格,TransactionID,还有参数,最 后才会加上\r\n。而Ping命令本身是不需要任何参数的,整个命令就只有PNG\r\n。解决办法是不是可以 构建一个专门的PingMessage对象来表示Ping命令,这个对象很简单:

1: public class PingMessage : XihSolutions.DotMSN.Core.NSMessage
2: {
3: public override byte[] GetBytes()
4: {
5: return System.Text.Encoding.UTF8.GetBytes("PNG\r\n");
6: }
7: }

重新修改一下SendPing方法:

1: void SendPing()
2: {
3: messenger.NameserverProcessor.SendMessage(new PingMessage());
4: }

登录后,发送一个Ping命令试试,PingAnswer事件触发了,用户不会被踢出了。这表示Ping命令发送 成功了。接下来所要做的就是创建一个Timer对象,由Timer对象来控制定时向服务器发送Ping命令,以保 证机器人客户端正与服务器保持连接。

注意,目前我的测试是在之前连接断开间隔时间内,甚至更长一些,机器人始终保持连接。不保证全 天候都能保持连接,但是其它的断开原因可能需要不同的处理方法。

时间: 2024-09-21 09:52:15

DotMSN机器人自动掉线的问题的相关文章

无线路由器自动掉线的原因

  问: 我们同学几个人在宿舍里架设了一个共享网络,一共是一台笔记本和两台台式机,三台机器一起冲浪.通过宽带路由器拨号上网,采用的是SOHO级多 功能宽带路由器,具备无线功能,平时我们都是三个人一起共享上网打游戏和浏览网页的,不过我们最近发现寝室的网络太不稳定了,可以说到了无法容忍的地步,平时网络使用过程中经常掉线. 经过反复测试和记录故障信息后来我们发现了一个故障规律,那就是基本上半个小时自动掉一次,不过每次掉线后等待一段时间后又马上能够恢复正常, 虽然可以继续使用网络,但是众所周知我们玩游戏

Windows8系统ADSL空闲时自动掉线怎么办

  知识点分析: 在宽带连接属性里面启用了闲置自动断线设定.只要关闭这项功能,问题就能解决了 操作步骤: 第一步,打开"开始"--"控制面板"--点击"网络和共享中心" 第二步,选择左边的"更改适配器设置"选项并双击 第三步,找到"宽带连接",右键点击选择"属性" 第四步,在"宽带连接"属性设置界面,选择第二项"选项",将"挂断前的空闲时

无线路由器自动掉线怎么解决?

  问:我们同学几个人在宿舍里架设了一个共享网络,一共是一台笔记本和两台台式机,三台机器一起冲浪.通过宽带路由器拨号上网,采用的是SOHO级多功能宽带路由器,具备无线功能,平时我们都是三个人一起共享上网打游戏和浏览网页的,不过我们最近发现寝室的网络太不稳定了,可以说到了无法容忍的地步,平时网络使用过程中经常掉线. 经过反复测试和记录故障信息后来我们发现了一个故障规律,那就是基本上半个小时自动掉一次,不过每次掉线后等待一段时间后又马上能够恢复正常,虽然可以继续使用网络,但是众所周知我们玩游戏掉线一

Windows 8 系统ADSL空闲时自动掉线的解决方案

在宽带连接属性里面启用了闲置自动断线设定.只要关闭这项功能,问题就能解决了 操作步骤: 第一步,打开"开始"--"控制面板"--点击"网络和共享中心" 第二步,选择左边的"更改适配器设置"选项并双击 第三步,找到"宽带连接",右键点击选择"属性" 第四步,在"宽带连接"属性设置界面,选择第二项"选项",将"挂断前的空闲时间"改为

win8电脑ADSL经常自动掉线怎么办 adsl掉线解决办法

知识点分析: 在宽带连接属性里面启用了闲置自动断线设定.只要关闭这项功能,问题就能解决了 操作步骤: 第一步,打开"开始"--"控制面板"--点击"网络和共享中心"     第二步,选择左边的"更改适配器设置"选项并双击     第三步,找到"宽带连接",右键点击选择"属性"     第四步,在"宽带连接"属性设置界面,选择第二项"选项",将&qu

ADSL自动掉线Win7下的原因及解决方法

在其它软硬件工作正常的情况下,出现这种问题,多半是因为启用了闲置自动断线设定.只要关闭这项功能,问题就能解决了. 具体步骤如下:打开"开始->控制面板" 点击"网络和Internet" 再按一下"网络和共享中心" 单击页面左上角的"更改适配器设置"接着,在ADSL宽带连接图标上,右键鼠标,选择"属性"切换至"选项"页,在"重播间隔"下拉菜单中选择"从不

千牛锁频后自动掉线返回登录界面怎么办

  解决办法: 1.核实手机是否登录了旺信或者登录了手机淘宝客户端中的旺旺,这三个旺旺不支持同时登录. 2.手机是否装有省电应用,若装有省电应用(e.g360手机助手.金山电池医生),请将千牛加入应用内的白名单. 3.手机网络登录QQ.微信时,是否能正常接收消息. 4.iPhone用户:千牛设置--聊天设置,确保已经勾选"后台保持在线" 若上述操作后,仍出现该状况,请通过千牛中的问题反馈,进行提交

环信的登录状态会自动掉线么,假设网络一直存在,且应用永不退出,那么应用是否会一直在线?

问题描述 解决方案 调用login成功之后,只要不调用logout都是登录状态.登录状态和一直在线是有区别的,你可以调用rest接口判断一下解决方案二:OK,那么我理想的情况是终端能一直在线,即可以随时收发消息,有办法保持一直在线么?解决方案三:没网络,退出应用杀死进程,退出登录都会导致不在线.这些条件你能满足么

日本大阪大学研究人员推出能够自动生成步态的弱力四足机器人

对于那些研发四足运动机器人的专家而言,往往需要耗费大量时间来制定机器人步态控制策略,这样才能确保它们行走时更加稳定.并适应各种不同环境.一般来说,科学家会使用先进的控制器来让机器人更有效地完成工作任务,比如向机器人指派给定任务,或是根据特定地形来选择适当的步态. 不过现在,一批来自日本大阪大学的研究人员正在尝试采用不同的方法,依靠四足机器人的身体和周围环境之间的相互作用,加上一些弱力腿部电机的支持,在不需要任何传感器或控制器的条件下让机器人自动生成步态. 这个概念最厉害的一点,就是可以利用低扭矩