VB中利用winsock控件获取验证码图片

Eddy 发布于2010-12-6 16:20:46 分类: 程序设计 已浏览loading 网友评论0条 我要评论

好久没写代码了,工作、论文、考试……很多事还要做,希望尽快结束!

看到朋友blog里发了篇文章,就顺便学习了下,稍微注释了下代码(基本没动)。对于红色的两句,如果看代码仔细的话会不会想下为何是+3而不是+4呢^_

或许这问题有点幼稚,呵呵。我是自己在IDE中调试了下才知道

代码:

Option Explicit
Private Function RndNumber()                                                    '生成16位随机t。。
    Randomize
    RndNumber = Format$((Rnd * 0.99) + 0, "0.0000000000000000")
    Debug.Print RndNumber
End Function

Private Sub Picture1_Click()
    '连接服务器
    If Winsock1.State <> 0 Then Winsock1.Close
    Winsock1.RemoteHost = "captcha.qq.com"
    Winsock1.RemotePort = 80
    Winsock1.Protocol = sckTCPProtocol
    Winsock1.Connect
End Sub

Private Sub Winsock1_Connect()
    Dim str$, RndN As Single
    '组包并发送
    RndN = RndNumber
    str = "GET /getimage?aid=15000101&" & RndN & " HTTP/1.1" & vbCrLf
    str = str & "Host: captcha.qq.com" & vbCrLf
    str = str & vbCrLf
    Winsock1.SendData str
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim BytData() As Byte, a&, b&, ii&, NewBytDate() As Byte
    '接收并处理服务器返回的数据
    Winsock1.GetData BytData, vbArray + vbByte, bytesTotal
    On Error Resume Next
    a = InStrB(BytData, ChrB(13) & ChrB(10) & ChrB(13) & ChrB(10))
    b = UBound(BytData) - a - 3
    ReDim NewBytDate(b)
    For ii = 0 To b
        NewBytDate(ii) = BytData(a + 3 + ii)
    Next
    Open App.Path & "\temp.jpg" For Binary As #1
        Put 1, , NewBytDate
    Close #1
    Picture1.Picture = LoadPicture(App.Path & "\temp.jpg")
    Kill App.Path & "\temp.jpg"
End Sub

Private Sub Winsock1_Close()
    If Winsock1.State <> 0 Then Winsock1.Close
End Sub

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/671.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言