如何实现Winsock应答式(HTTP)协议同步问题在一个高人的CSDN博客上抄了一段 Winsock API代码
类的地址在这里 http://blog.csdn.net/lyserver/archive/2009/11/26/4880416.aspx
复制过来太长了 帖子装不下然后我调用这个类,窗体代码如下Private Sub Command1_Click()
Dim z As String
Dim b As New Winsocket
b.Disconnect
Call b.Connect("www.baidu.com", 80)
Call b.SendData(Text1.Text)
b.SendBufferSize = 0
Call b.GetData(z)
Text2.Text = z
End Sub'Text1的内容
'GET / HTTP/1.1
'Accept: */*
'Accept-Language: zh-cn
'UA-CPU: x86
'Accept-Encoding: gzip, deflate
'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
'Host: www.baidu.com
'Connection: Keep-Alive
'怎么获取到的数据不全呢?只有一半数据,也不知道是不是我的调用方法错了
类的地址在这里 http://blog.csdn.net/lyserver/archive/2009/11/26/4880416.aspx
复制过来太长了 帖子装不下然后我调用这个类,窗体代码如下Private Sub Command1_Click()
Dim z As String
Dim b As New Winsocket
b.Disconnect
Call b.Connect("www.baidu.com", 80)
Call b.SendData(Text1.Text)
b.SendBufferSize = 0
Call b.GetData(z)
Text2.Text = z
End Sub'Text1的内容
'GET / HTTP/1.1
'Accept: */*
'Accept-Language: zh-cn
'UA-CPU: x86
'Accept-Encoding: gzip, deflate
'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
'Host: www.baidu.com
'Connection: Keep-Alive
'怎么获取到的数据不全呢?只有一半数据,也不知道是不是我的调用方法错了
Private Function ReadEcho(Optional ByVal strEOF As String = vbCrLf, Optional ByVal lngTimeout As Long = 20000) As String
Dim lngStartTime As Long
Dim strBuffer As String, strResult As String
lngStartTime = GetTickCount
Do
strBuffer = ""
m_objWinSock.GetData strBuffer
If Len(strBuffer) > 0 Then
strResult = strResult & strBuffer
If InStr(strResult, strEOF) Then Exit Do
End If
DoEvents
Loop Until GetTickCount - lngStartTime > lngTimeout
ReadEcho = strResult
End Function
Dim lngStartTime As Long
Dim strBuffer As String, strResult As String
lngStartTime = GetTickCount
Do
strBuffer = ""
m_objWinSock.GetData strBuffer
If Len(strBuffer) > 0 Then
strResult = strResult & strBuffer
If InStr(strResult, strEOF) Then Exit Do
End If
DoEvents
Loop Until GetTickCount - lngStartTime > lngTimeout
ReadEcho = strResult
End Function
的 是哪个阻塞的吗?好像没有
'本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2009/11/15/4812864.aspx'本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2009/11/26/4880416.aspx
这两个都看了
呵呵
大哥帮忙看看这样对不
我用的是你那个阻塞的类Private Sub Command3_Click()
Dim w1 As New Winsocket
Dim ccc As String
Text2 = Get_HTTP("/")'生成HTTP协议的封包
Call w1.Connect("www.baidu.com", 80)
zz = w1.SendData(Text2.Text)
is_out = ""
Do
z = w1.GetData(ccc)
If Len(ccc) > 0 Then
is_out = is_out & ccc
If InStr(is_out, "</html>") Then Exit Do'结束标志
End If
Loop
Text1.Text = is_out
End Sub
这样可以不?
另外这种最好怎么做出错处理比较好,
比如中途掉线