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 這樣用在這里 不可以嗎? 請教高手~~~~~~~
uj5u.com熱心網友回復:
肯定不可以啊!“網路傳輸”是有延時的、是“低速”操作,并且多數情況下是異步操作(你用“控制元件物件”肯定是異步操作的)。
你執行 sckconnect1.SendData 僅僅是把待發資料、及相關資訊提交了,并不是“立即完成發送”的,
此“陳述句”執行后是立即回傳,資料得“稍候,待合適時機再發送”。
你在 sckconnect1.SendData 后馬上執行 sckconnect1.Close ,連接立即被斷開了,資料肯定發不出去。
uj5u.com熱心網友回復:
優雅地關閉連接都是收到某個特定資訊后關閉。uj5u.com熱心網友回復:
優雅地關閉連接都是收到某個特定資訊后關閉。uj5u.com熱心網友回復:

嗯.如一樓大神所說.
應該有一個發送完成 的事件 蹭分 蹭分...
uj5u.com熱心網友回復:
我把sckconnect1.Close 洗掉,能正常運行了。但是過了兩天 我去看,程式沒反應了,我用sckconnect1.state屬性看了一下,發現值是9,就是sckError。另外我是用timer控制元件進行控制的,
請問這如何改程式呢?求大神給個思路
uj5u.com熱心網友回復:
哎,是說不能發完立即關閉,而不是說不關閉啊。如果你不關閉,那么這個連接會一直保持著,直到斷網、服務端斷開連接、服務端服務停止……等等情況導致連接斷開。
你應該在確認資料發送完畢,對方也收到資訊了,沒必要繼續再發的時候及時關閉。
uj5u.com熱心網友回復:
添加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
uj5u.com熱心網友回復:
請問樓上哪個狀態表示發送完?uj5u.com熱心網友回復:
對方發送來接收完畢資訊后關閉uj5u.com熱心網友回復:
我暫時 在sendComplete事件里 延時5秒后關閉,雖然也成功了但是我發現 最妥善的方法應該是接受到回傳命令后再關閉
我是跟一個網路模塊通訊的,這個設備的說明書里 說 若設備正常執行命令后,會回傳這個資料“000100000006FF0F00640002”
我應該如何接收這個資料呢?
uj5u.com熱心網友回復:
還有高手在嗎?uj5u.com熱心網友回復:
僅供參考: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
uj5u.com熱心網友回復:
這個看起來很難,既使能通過,在實踐中,也會出現卡殼的。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/38741.html
標籤:網絡編程
上一篇:有沒有研究過函式自動分解工具
