关于sock连接

lsdouli 2018-01-25 08:49:57
Private Sub DO2_1()
Dim connectFiag As Boolean
Dim fx() As Byte
connectFiag = False
If Not connectFiag Then
sckconnect1.Close
sckconnect1.Connect "10.22.172.147", 502
Do
DoEvents
Loop Until sckconnect1.State = sckConnected
connectFiag = True
End If

ReDim fx(11)
fx(0) = &H0
fx(1) = &H1
fx(2) = &H0
fx(3) = &H0
fx(4) = &H0
fx(5) = &H6
fx(6) = &HFF
fx(7) = &H5
fx(8) = &H0
fx(9) = &H65
fx(10) = &HFF
fx(11) = &H0
sckconnect1.SendData fx
sckconnect1.Close
End Sub


Private Sub DO1_0()
Dim connectFiag As Boolean
Dim fx() As Byte
connectFiag = False
If Not connectFiag Then
sckconnect1.Close
sckconnect1.Connect "10.22.172.147", 502
Do
DoEvents
Loop Until sckconnect1.State = sckConnected
connectFiag = True
End If

ReDim fx(11)
fx(0) = &H0
fx(1) = &H1
fx(2) = &H0
fx(3) = &H0
fx(4) = &H0
fx(5) = &H6
fx(6) = &HFF
fx(7) = &H5
fx(8) = &H0
fx(9) = &H64
fx(10) = &H0
fx(11) = &H0
sckconnect1.SendData fx
sckconnect1.Close

End Sub


Private Sub Command2_Click()
Call DO1_1
End Sub

Private Sub Command3_Click()
Call DO1_0
End Sub


有人能帮我看看嘛? sckconnect1.Close 这句加上去,就执行不成功,删掉就能正常运行
sckconnect1.Close 这样用在这里 不可以吗? 请教高手~~~~~~~
...全文
885 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
aq1232007 2019-03-12
  • 打赏
  • 举报
回复
这个看起来很难,既使能通过,在实践中,也会出现卡壳的。
赵4老师 2018-02-26
  • 打赏
  • 举报
回复
仅供参考:
Dim after As Double
Dim strTotal(11) as Byte
Dim s as Long

    sckconnect1.SendData fx
    'sckconnect1.Close
    after = Now + 10# / 24# / 3600#
    Do
        DoEvents
        If sckconnect1.State = 0 Then Exit Do
        If Now > after Then
            sckconnect1.Close
            Exit Do
        End If
    Loop



Private Sub sckconnect1_DataArrival(ByVal bytesTotal As Long)
Dim strData() As Byte
Dim i As Long
Dim hexstr As String
On Error Resume Next
    ReDim strData(bytesTotal-1)
    sckconnect1.GetData strData
    for i=0 to bytesTotal-1
        if s+i<12 Then strTotal(s+i)=strData(i) else exit for
    next
    s=s+i
    if s>=12 then
        for i=0 to 11
            hexstr=hexstr & Right("0"&Hex(strTotal(i)),2)
        next
        if hexstr="000100000006FF0F00640002" Then sckconnect1.Close
    end if
End Sub
lsdouli 2018-02-14
  • 打赏
  • 举报
回复
还有高手在吗?
lsdouli 2018-02-10
  • 打赏
  • 举报
回复
我暂时 在sendComplete事件里 延时5秒后关闭,虽然也成功了 但是我发现 最妥善的方法应该是接受到返回命令后再关闭 我是跟一个网络模块通讯的,这个设备的说明书里 说 若设备正常执行命令后,会返回这个数据“000100000006FF0F00640002” 我应该如何接收这个数据呢?
xzjxucxx 2018-02-09
  • 打赏
  • 举报
回复
对方发送来接收完毕信息后关闭
赵4老师 2018-02-08
  • 打赏
  • 举报
回复
请问楼上哪个状态表示发送完?
chsh6699 2018-02-07
  • 打赏
  • 举报
回复
添加Timer监听网络发送完断开 Select Case Winsock1.State Case 0 Label1.Caption = "状态:关闭" Case 1 Label1.Caption = "状态:打开" Case 2 Label1.Caption = "状态:侦听" Case 3 Label1.Caption = "状态:连接挂起" Case 4 Label1.Caption = "状态:识别主机" Case 5 Label1.Caption = "状态:已识别主机" Case 6 Label1.Caption = "状态:正在连接" Case 7 Label1.Caption = "状态:已连接" Case 8 Label1.Caption = "状态:同级人员正在关闭连接" Case 9 Label1.Caption = "状态:错误" End Select
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
哎,是说不能发完立即关闭,而不是说不关闭啊。 如果你不关闭,那么这个连接会一直保持着,直到断网、服务端断开连接、服务端服务停止……等等情况导致连接断开。 你应该在确认数据发送完毕,对方也收到信息了,没必要继续再发的时候及时关闭。
lsdouli 2018-02-05
  • 打赏
  • 举报
回复
我把sckconnect1.Close 删除,能正常运行了。 但是过了两天 我去看,程序没反应了,我用sckconnect1.state属性看了一下,发现值是9,就是sckError。另外我是用timer控件进行控制的, 请问这如何改程序呢?求大神给个思路
小噤 2018-01-26
  • 打赏
  • 举报
回复
嗯.如一楼大神所说. 应该有一个发送完成 的事件 蹭分 蹭分...
舉杯邀明月 2018-01-25
  • 打赏
  • 举报
回复
肯定不可以啊! “网络传输”是有延时的、是“低速”操作,并且多数情况下是异步操作(你用“控件对象”肯定是异步操作的)。 你执行 sckconnect1.SendData 仅仅是把待发数据、及相关信息提交了,并不是“立即完成发送”的,   此“语句”执行后是立即返回,数据得“稍候,待合适时机再发送”。 你在 sckconnect1.SendData 后马上执行 sckconnect1.Close ,连接立即被断开了,数据肯定发不出去。
赵4老师 2018-01-25
  • 打赏
  • 举报
回复
优雅地关闭连接都是收到某个特定信息后关闭。
赵4老师 2018-01-25
  • 打赏
  • 举报
回复
优雅地关闭连接都是收到某个特定信息后关闭。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧