以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]OpenQQ心跳超时  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=103819)

--  作者:windmouse
--  发布时间:2017/7/17 21:11:00
--  [求助]OpenQQ心跳超时

依据帮助中   《关于IP、端口和防火墙》章节的说明,

在本机上尝试OpenQQ的服务端和客户端

QQServer的IP地址设置为“127.0.0.1”,客户端通过"127.0.0.1"即可访问本机的QQServer。
端口设置也和帮助一致,

服务端开启后,客户端也正常登陆了——有弹窗提示

 

为何过了一会就弹窗提示“心跳超时,OpenQQ失去连接,正在连接服务器。。。”

 

重新设置了心跳间隔为50  心跳超时未150也还是一样。


--  作者:有点蓝
--  发布时间:2017/7/17 21:32:00
--  
1、使用帮助的示例测试一下,看正常吗

2、关闭防火墙测试

--  作者:windmouse
--  发布时间:2017/7/17 22:31:00
--  

1、用帮助的实例测试可以正常。

2、我自己的程序防火墙关闭了,测试也是一样。

 

是否是我的用户表是引用外部数据源引起的呢?

 

 

我根据帮助的《在菜单提示新消息》进行设置后,可以看到显示登录的图标在提示“心跳超时,OpenQQ失去连接,正在连接服务器。。。”时变灰色的,显示重连的弹窗消失后又变彩色的。

 

这是否说明是会间歇性断线,这是正常的吗?


--  作者:有点蓝
--  发布时间:2017/7/17 22:43:00
--  
服务端的OpenQQ事件代码发上来看看。

客户端去掉在菜单提示新消息》的相关代码,然后测试是否正常

--  作者:windmouse
--  发布时间:2017/7/17 22:56:00
--  

UserLogging:

Dim pts() As String = e.UserName.Split(".")
Dim dr1 As DataRow
dr1 = DataTables("Users").Find("上级 = \'" & pts(0) & "\' And Name = \'" & pts(1) & "\'")
If dr1 Is Nothing  Then \'判断此用户不存在
    e.Message  = "用户名错误!" \'返回给登录者的提示信息
    Return
End If
If dr1("Password") <> e.Password Then \'如果密码错误
    e.Message  = "登录密码错误!" \'返回给登录者的提示信息
    Return
End If
e.Success = True \'允许用户登录

\'最后添加相同部门的同事为好友
For Each dr2 As DataRow In DataTables("Users").DataRows
    Dim nm As String =  dr2("上级") & "." & dr2("Name")
    If nm <> e.UserName Then \'如果不是登录者本人
        e.Buddies.Add(nm)
    End If
Next

 

ReceivedMessage:

If e.Message = "GetDate" Then
    e.ReturnValue = Date.Now
End If

 

UserChangePassword

Dim pts() As String = e.UserName.Split(".")
Dim dr As DataRow = DataTables("Users").Find("上级 = \'" & pts(0) & "\' And Name = \'" & pts(1) & "\'")
If dr Is Nothing  OrElse dr("Password") <> e.OldPassword  Then
   e.ReturnMessage = "原密码不符!"
Else
    dr("Password") = e.NewPassword
    dr.Save()
   e.ReturnMessage = "OK" \'返回约定的字符,通知客户端,密码修改成功
End If

 

启动

Click

QQServer.ServerIp = e.Form.Controls("IP").value               \'指定IP地址
QQServer.ServerPort = e.Form.Controls("端口").value              \'指定端口
QQServer.HeartbeatInterval = e.Form.Controls("心跳超时").value                     \'指定心跳时间
QQServer.HeartbeatTimeout =  e.Form.Controls("心跳间隔").value                         \'指定心跳超时时间
QQServer.Start()

 

其实跟帮助的代码是一致的

 

客户端我是测试的时候发现会资源间歇性断线——因为打开的内置聊天窗口会关闭,然后又可以重新打开。

我才导入在菜单提示新消息》的相关代码 以便比较直观的观察。


--  作者:windmouse
--  发布时间:2017/7/17 23:02:00
--  

电脑系统也无问题,

因为我测试的帮助示例,是不会出现这样的情况的。

 

现在唯一的区别可能是帮助示例  OpenQQ的用户表是在服务端

 

而我这边的 OpenQQ的用户表也是在服务端,只不过该用户表是本机SQL的外部数据表,该用户表同时也是与foxtable用户表。


--  作者:windmouse
--  发布时间:2017/7/17 23:09:00
--  

间歇性断线, 断线的时间间隔约为7秒,在线的间隔约为50秒

 

  心跳间隔的设置为50   心跳超时设置为150   端口根据帮助设置为52177

 

 IP地址设置我本机的192.168.1.7     原来用127.0.0.1测试也是一样的


--  作者:windmouse
--  发布时间:2017/7/17 23:14:00
--  

已将服务端和客户端打包于附件中,请帮忙看下问题在哪  不过因为引用的用户表在我这边本机的SQL中,你那边可能无法测试。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:openqq心跳超时.rar


--  作者:有点蓝
--  发布时间:2017/7/17 23:16:00
--  
客户端去掉在菜单提示新消息》的相关代码,然后测试是否正常

使用示例的客户端改改登录你的服务端,测试是否正常

--  作者:有点甜
--  发布时间:2017/7/18 8:48:00
--  
回复8楼,把数据源改成access,上传上来测试。