28,409
社区成员




Option Explicit
Public Sub FireEvent(ByVal strClassName, ByVal strEventName, pArray)
Dim strExp, arr, i
strExp = "Call $Class_$Event($Param)"
strExp = Replace(strExp, "$Class", strClassName)
strExp = Replace(strExp, "$Event", strEventName)
ReDim arr(UBound(pArray))
For i = 0 To UBound(arr)
arr(i) = "pArray(" & i & ")"
Next
strExp = Replace(strExp, "$Param", Join(arr, ", "))
Execute strExp
End Sub
Public Const sckClosed = 0 '缺省的。关闭
Public Const sckOpen = 1 '打开
Public Const sckListening = 2 '侦听
Public Const sckConnectionPending = 3 '连接挂起
Public Const sckResolvingHost = 4 '识别主机
Public Const sckHostResolved = 5 '已识别主机
Public Const sckConnecting = 6 '正在连接
Public Const sckConnected = 7 '已连接
Public Const sckClosing = 8 '同级人员正在关闭连接
Public Const sckError = 9 '错误
Dim s, recv, blnSend
blnSend = False
Set s = WScript.CreateObject("MSWinSock.WinSock")
s.Protocol = 0
s.RemoteHost = "www.sohu.com"
s.RemotePort = 80
s.Connect
Do While True
Select Case s.State
Case sckClosed
Case sckOpen
Case sckListening
Case sckConnectionPending
Case sckResolvingHost
Case sckHostResolved
Case sckConnecting
Case sckConnected
If Not blnSend Then
FireEvent "s", "Connect", Array()
Else
Do While s.BytesReceived > 0
FireEvent "s", "DataArrival", Array(s.BytesReceived)
Loop
End If
Case sckClosing
FireEvent "s", "Close", Array()
Exit Do
Case sckError
FireEvent "s", "Error", Array()
Exit Do
End Select
WScript.Sleep 100
Loop
s.Close
Set s = Nothing
Private Sub s_Connect()
WScript.Echo "socket connected"
s.SendData "GET / HTTP/1.1" & vbCrLf & _
"Host: www.sohu.com" & vbCrLf & _
"Connection: Close" & vbCrLf & vbCrLf
blnSend = True
End Sub
Private Sub s_Close()
WScript.Echo "socket closed"
WScript.Echo Replace(recv, Chr(0), "")
End Sub
Private Sub s_DataArrival(ByVal bytesTotal)
Dim tmp
tmp = String(bytesTotal, Chr(0))
s.GetData tmp, vbString, bytesTotal
WScript.Echo "socket recv " & bytesTotal & " bytes"
recv = recv & tmp
End Sub
Private Sub s_Error()
WScript.Echo "socket error"
FireEvent "s", "Close", Array()
End Sub
Option Explicit
Public Sub FireEvent(ByVal strClassName, ByVal strEventName, pArray)
Dim strExp, arr, i
strExp = "Call $Class_$Event($Param)"
strExp = Replace(strExp, "$Class", strClassName)
strExp = Replace(strExp, "$Event", strEventName)
ReDim arr(UBound(pArray))
For i = 0 To UBound(arr)
arr(i) = "pArray(" & i & ")"
Next
strExp = Replace(strExp, "$Param", Join(arr, ", "))
Execute strExp
End Sub
Public Const sckClosed = 0 '缺省的。关闭
Public Const sckOpen = 1 '打开
Public Const sckListening = 2 '侦听
Public Const sckConnectionPending = 3 '连接挂起
Public Const sckResolvingHost = 4 '识别主机
Public Const sckHostResolved = 5 '已识别主机
Public Const sckConnecting = 6 '正在连接
Public Const sckConnected = 7 '已连接
Public Const sckClosing = 8 '同级人员正在关闭连接
Public Const sckError = 9 '错误
Dim s, recv, blnSend
blnSend = False
Set s = WScript.CreateObject("MSWinSock.WinSock")
s.Protocol = 0
s.RemoteHost = "www.sohu.com"
s.RemotePort = 80
s.Connect
Do While True
Select Case s.State
Case sckClosed
Case sckOpen
Case sckListening
Case sckConnectionPending
Case sckResolvingHost
Case sckHostResolved
Case sckConnecting
Case sckConnected
If Not blnSend Then
FireEvent "s", "Connect", Array()
Else
Do While s.BytesReceived > 0
FireEvent "s", "DataArrival", Array(s.BytesReceived)
Loop
End If
Case sckClosing
FireEvent "s", "Close", Array()
Exit Do
Case sckError
FireEvent "s", "Error", Array()
Exit Do
End Select
WScript.Sleep 100
Loop
s.Close
Set s = Nothing
Private Sub s_Connect()
WScript.Echo "socket connected"
s.SendData "GET / HTTP/1.1" & vbCrLf & _
"Host: www.sohu.com" & vbCrLf & _
"Connection: Close" & vbCrLf & vbCrLf
blnSend = True
End Sub
Private Sub s_Close()
WScript.Echo "socket closed"
WScript.Echo Replace(recv, Chr(0), "")
End Sub
Private Sub s_DataArrival(ByVal bytesTotal)
Dim tmp
tmp = String(bytesTotal, Chr(0))
s.GetData tmp, vbString, bytesTotal
WScript.Echo "socket recv " & bytesTotal & " bytes"
recv = recv & tmp
End Sub
Private Sub s_Error()
WScript.Echo "socket error"
FireEvent "s", "Close", Array()
End Sub
if sock.BytesReceived>0 then
sock.getdata revdata,vbString
if instr(revdata,"exit") then
exit do
else
end if
loop
sock.close