Foxtable(狐表)用户栏目专家坐堂 → [求助]OpenQQ批量下载时会出错,会是BUG吗?


  共有3473人关注过本帖树形打印复制链接

主题:[求助]OpenQQ批量下载时会出错,会是BUG吗?

帅哥哟,离线,有人找我吗?
hui986
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/14 21:11:00 [只看该作者]

因些我才怀疑是否多线程发送文件这块做得是否还是不够严谨

 

假如确定没办法的话,我也可以用队列的方式来处理


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/14 21:50:00 [只看该作者]

 如果你在遍历的过程中,集合的值发生改变,就会报那个错。

 

 肯定是你代码问题,做实例发上来。


 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/14 22:42:00 [只看该作者]

值对与错都不会影响服务器的,因为服务器接收到信息,分析信息并核对文件,都正确才向终端发文件

 


 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/14 22:43:00 [只看该作者]

接收的信息与文件都对就返回文件信息不对就返回信息

现在出错的是服务器,不是终端

[此贴子已经被作者于2016/7/14 22:44:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/14 23:12:00 [只看该作者]

贴出服务器端代码。

 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/14 23:37:00 [只看该作者]

If Emeg.Contains("EDOWICO♂") Then
    'QQClient.Send("EDOWICO♂" & strMD5,True)    '终端请求下载图标文件信息
    Dim strMD5 As String = Emeg.split("♂")(1)   '获取信息内容的MD5
    Dim cmd1 As New SQLCommand
    cmd1.ConnectionName = gs_strActiveConn
    cmd1.CommandText = "s elect * from EimFileLog where EMain = '1' and  MD5 = '" & strMD5 & "'"
    Dim dt1 As DataTable = cmd1.ExecuteReader   

    If dt1.DataRows.Count > 0 Then                     '如果已经传过相应的文件了
        Dim dr1 As DataRow = dt1.DataRows(0)
        Dim ico As String  = gs_QQServerPath & "System\ICO\" &  dr1("ICO")
        If FileSys.FileExists(ico) Then '如果指定的文件存在
            QQServer.SendFile(Euser,ico)           '发给终端
        End If
    Else '不成功
        QQServer.Send(Euser,"Eim服务器找不到文件!")
    End If
End If

[此贴子已经被作者于2016/7/14 23:47:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/14 23:37:00 [只看该作者]

这是关键的代码了,是用自定义函数来做的

 


 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/15 0:50:00 [只看该作者]

再次反复测试,一到328个数据就出错,我删除了相应数据及文件,

再次测试也是停留在第328个数据

 

 

 

我再返过来在服务器用遍历文件的方式发送到终端,

结果全部发到本地,并完全接收完成

但服务器也是出现原来的错误!


 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:494 积分:3432 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2016/7/15 1:05:00 [只看该作者]

我再返过来在服务器用遍历文件的方式发送到终端,

If Emeg.Contains("EDOWICO♂") Then 

    For Each ico As String In FileSys.GetFiles(gs_QQServerPath & "System\ICO\")
          QQServer.SendFile(Euser,ico)           '发给终端  (注文件总数为333个小图标)
    Next                 
End If

结果全部发到本地,并完全接收完成

但服务器也是出现原来的错误!


 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/7/15 9:14:00 [只看该作者]

问题我检查一下。

 

但一次性发送300多个文件,是不负责任的设计。

 

我举个例子:

foxtable内在的文件传输,用的是分包,将一个大文件分成上千个包,一开始就发送10个包,每次检查有包发送成功的确认信号,就发下一个包,这样始终保持有10个左右的包处于发送状态,充分利用带宽,同时也不至于因为资源耗尽导致系统出错。
不仅仅是文件,OpenQQ在发送一些很长的字符串时,例如好友列表,离线消息等等,都是用这个方法,将字符串分割成包发送,不会一次发送出去。

 

所以你也可以改变设计思路,将要发送的文件加入一个集合。
第一次发送10个文件,利用这个事件检查是否有文件发送完成:
http://www.foxtable.com/webhelp/scr/3028.htm

http://www.foxtable.com/webhelp/scr/3030.htm

 一旦有文件发送完成,就发送下一个待发文件,始终保持有10个文件处于发送状态,高效稳定。
 


 

[此贴子已经被作者于2016/7/15 9:21:20编辑过]

 回到顶部
总数 21 上一页 1 2 3 下一页