| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 597 人关注过本帖
标题:关于局网连线状态
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:100 回复次数:6 
关于局网连线状态
VB6要怎辨明免传输中间~是否有掉线情况~或是掉了又上之类~
造成Client传输封包遗失导致Server档案不全~

除了一开始传档就一直ping外~还有其他方法吗?
搜索更多相关主题的帖子: 遗失 
2011-08-29 11:08
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
记得以往学OSI网路七层架构时~关于封包传送成功后好像有返回~
要怎接收那讯息来确认有确实传到?或是FTP有内建指令可直接用?

不要選我當版主
2011-08-29 11:18
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:100 
qTCP 连接,当网络中断时,会有一个消息返回 。

1、连接后,分数据传输和应答传输。
2、服务器端,也同样分这二种。
3、连接服务器成功后,定时发送 应答包。或者从服务器上发应答包回来。只能一方主动发应答包。
   应答包可以是  一个字符 ,如 一个 星号 。
4、接到 应答包后 ,也直接回复一个 字符,建议与应答包不同。  应答包发送频率建议 为 0.5秒 一个。
5、VB网络连接过程中,如果发送消息时,网络中断,立即会产生错误消息,这个错误可以响应的。
6、在VB网络连接过程中,如果不发送消息时,网络中断,不会立即产生错误消息,要到下一次发送消息时,才会收到错误消息。


UDP连接 ,属无连接模式。在VB中 ,可以学习QQ的传输模式进行操作。
1、每个数据包,发送二次, 服务器端收到数据包里,根据数据包里的编号,丢弃一个。 数据包要保存在内存中,收到回包后才能清除。
2、服务器收到数据包后,回复同样编号的数据包,仍然发送二次。
3、当发送的数据,在规定时间内没有收到 相同编号的数据回包,重发这个数据包一次。规定时间可以定义为 30秒。
4、当重发的数据包,仍然超时没有收到回包,则按断线处理。
5、发包数量。客户端,可以定义为一次最大发包,如100个包,然后等回包,只有收到回包后,才能冲销掉这个数据包,然后产生新的数据包。保存到这个位置。然后重新等待。

type 数据包结构
   包 as string     '需要发的包数据
   计数 as long    '秒计数,用定时器每秒加一
   发包次数 as long   ‘一次只发一次,每发一次包,次数+1 。没达到 2 的情况下,继续发送。
   重发 as Boolean
end type

dim 数据包(1 to 100) as 数据包结构

定时器
for i=1 to 100
    数据包(i).计数=计数+1
    if 数据包(i).发包计数<2 then
       call 发包(数据包(i).包)
       数据包(i).发包次数= 数据包(i).发包次数+1
       数据包(i).计数=0  
   end if
   if  数据包(i).计数>30 then
      if  not 数据包(i).重发 then
         数据包(i).重发=true
        数据包(i).发包次数=0
       数据包(i).计数=0
     else
         '断线处理
      end if
    end if
next i

授人于鱼,不如授人于渔
早已停用QQ了
2011-08-29 11:49
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
如果是 FTP 服务器的话,
FTP 服务器有一个空指令,用来应对这个 操作。
客户端,每过 5秒 发一个空指令给服务器,就可以保持 这个连接。

文件是否上传正确:文件上传后,列出目录,然后检查这个文件的字节数是否与 上传前的文件的字节数是否相同。
如果有 CRC 检验之类的属性的,就再计算这个检验的属性。

授人于鱼,不如授人于渔
早已停用QQ了
2011-08-29 11:51
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
回复 4楼 风吹过b
1.意思是当档案上传时~同时发送空指令来确认连线是否持续的意思吗?
2.上传完的档案检查我有写~基本上是号传出去的封包总量和本机档案大小互相做比对~
至于CRC也可以检测~这我倒是可以再加上去~

我只是要确认一下方法~因为每次上机调试程式码~FTP连线都很容易断掉~
估计是超过TumeOut时间限制吧~所以麻烦~具体的我还要再想想~

因为不能事后检查才来怀疑可能是掉线~
必须掉线时就能跳出警告视窗来通知使用者~

[ 本帖最后由 wube 于 2011-8-29 17:30 编辑 ]

不要選我當版主
2011-08-29 17:24
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
FTP 软件,在 数据上传时,不会出现断线而没有通知的情况 。在不停的发数据包时,网络一中断,程序立即会捕捉到错误。
这种情况 下不需要再考虑 发额外的空指令。

只有 系统空闲时,有连接,但没有数据包收发时,才需要定时 发 空指令 包进行 反超时 操作。
并且反超时操作还有助于保持网络连接,在网络中断时,才能及时发现。

你可以设置一个计数器, 每次发数据包后,该变量置 0 。
然后每过 1秒,该计数器加1 。
当该计数器达到 10(10秒)时,就发一个空指令。同时该变量置0 。
以达到 不超时,网络中断及时发现的目的。

授人于鱼,不如授人于渔
早已停用QQ了
2011-08-29 21:37
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
可能是我想得太深入了~反正离交件还有时间~等程序写完我会试试看~

有看到的FTP的代码中~关于封包传送前有一行判断 Winsock.State 的功能可以接收返回状态~
我只需要在类中新增一个类事件~将这讯息再丢回给表格去处理即可~

程序代码:
Private Sub m_FtpConnection_FTPConnectStatus(Status As MSWinsockLib.StateConstants)

    Select Case Status
            'XXX
        Case sckClosed
            'XXX
        Case sckClosing
            'XXX
        Case sckConnected
            'XXX
        Case sckConnecting
            'XXX
        Case sckConnectionPending
            'XXX
        Case sckError
            'XXX
        Case sckHostResolved
            'XXX
        Case sckListening
            'XXX
        Case sckOpen
            'XXX
        Case sckResolvingHost
            'XXX
        Case Else
            'XXX
    End Select
End Sub


-------------------------------------------------------------------------------------------------------------------

当然除了使用的FTP指令做之外~我另外也加写了一个使用Shell Command 跑 BAT Run 脚本的方式去~做上传下载的功能~
只是用Dos Command Line简单多了~相对的能撷取到和能自行控制的部分就变少了~因为大部分操作系统都帮做掉了~

方便的话~有人能告知一下要把所有下DOS命令的过程转存出来的指令要怎打吗?

txtScript = App.Path & "\FTP.txt"
If Shell("CMD /k ftp -s:" & txtScript, vbHide) <> 0 Then    'Copy(让FTP执行剧本档fp.txt内的指令)-> 剧本档是由程序自动产生的

自动产生的txt脚本如下如下:
open XXX.XXX.XXX.XXX 21>1.txt
RD\ABC
1234
prompt
binary
mkdir 123456789
lcd C:\
lcd Test
lcd Local_Log
cd 123456789
mput 1_AAA.log
bye

命令这样下~只是每次都没有产生1.TXT档出来~

[ 本帖最后由 wube 于 2011-8-31 12:12 编辑 ]

不要選我當版主
2011-08-30 17:53
快速回复:关于局网连线状态
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016735 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved