标题:winsock提交表單返回值問題
只看楼主
ta8607
Rank: 4
等 级:业余侠客
帖 子:377
专家分:244
注 册:2007-9-22
结帖率:80%
已结贴  问题点数:10 回复次数:4 
winsock提交表單返回值問題
請問一下,如果用winsock.senddate 向服務器提交數據包以後,應該怎樣接收服務器返回值的數據?
比如:
strData   =   ""  
  strData   =   strData   &   "POST   /total/RechResultadd/ResultAddForSour.jsp   HTTP/1.1"   &   vbCrLf  
  strData   =   strData   &   "Accept:   image/gif,   image/x-xbitmap,   image/jpeg,   image/pjpeg,   application/vnd.ms-excel,   application/vnd.ms-powerpoint,   application/msword,   application/x-shockwave-flash,   */*"   &   vbCrLf  
  strData   =   strData   &   "Accept-Encoding:   gzip   ,   deflate"   &   vbCrLf  
  strData   =   strData   &   "Accept-Language:   zh-cn"   &   vbCrLf  
  strData   =   strData   &   "Content-Length:   505"   &   vbCrLf  
  strData   =   strData   &   "Cache-Control:   no-cache"   &   vbCrLf  
  strData   =   strData   &   "Connection:   Keep-Alive"   &   vbCrLf   &   vbCrLf  
  strData   =   strData   &   "Content-Type:   application/x-www-form-urlencoded"   &   vbCrLf  
  strData   =   strData   &   "Host:   trans.   &   vbCrLf  
  strData   =   strData   &   "Referer:   http://news.   &   vbCrLf  
  strData   =   strData   &   "User-Agent:   Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1;   SV1;   Maxthon;   Alexa   Toolbar;   .NET   CLR   1.1.4322;   .NET   CLR   2.0.50727)"   &   vbCrLf   &   vbCrLf  
  strData   =   strData   &   "nRid=1164597835463&check1164597835463=云南联通&check1164597835463=前 进牛奶&check1164597835463=渤骏装家汉&check1164597835463=拓东酱油& check1164597835463=福林堂&check1164597835463=江东集团& check1164597835463=腾药&check1164597835463=城建股份& check1164597835463=雪兰牛奶&check1164597835463=完美中国&submitok=提交& userName=userName&nRid=1164597835463"   &   vbCrLf  
  tcpServer.SendData   strData   

--------------
我發送了這個數據包,那我要怎樣獲取回來的數據了?
搜索更多相关主题的帖子: 返回值 winsock 
2010-03-22 09:34
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
保存这个连接:tcpServer

然后服务器有数据返回后,就会按 HTTP 协议封包形式返回数据。

首先是 HTTP 头。
在HTTP头中,有一个 指示数据长度的标志,你每次收到数据时,都要去查找这个标志。

然后以二个 vbcrlf 分隔,前面是HTTP头,后面是 HTTP 数据
数据都是明文,用 & 连接起来,注意,数据有可能是采用 UTF-8 传输编码。如果是这样,那么就必须进行一次解码。
把所有收到的数据都连接起来,如果长度大于或等于 前面标识的数据长度,那么你就应该主动断开 连接。
一般服务器都设置了连接复用,意味着服务器不会主动断开连接,必须你断开。

但我们一般使用 WINSOCK 来连接 WEB 服务器时,连接一般不要复用,而是用完后就立即关闭。

这句改成这们,可以使用代理服务器。
  strData   =   strData   &   "POST   http://trans."   &   vbCrLf  
然后代理服务器的 地址写在 host 节里。


授人于鱼,不如授人于渔
早已停用QQ了
2010-03-22 12:06
ta8607
Rank: 4
等 级:业余侠客
帖 子:377
专家分:244
注 册:2007-9-22
得分:0 
謝謝回復!
是DataArrival事件有返回值嗎?
我提交了數據以後,DateArrival的事件是沒有執行過。
這代表服務器沒有數據返回過來?還是要用其他的辦法來接收?

不理会流言蜚语,努力做好份内事情,只做自己.
2010-03-22 12:10
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:10 
一个片断

程序代码:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim xx As String
    Winsock1.GetData xx
'显示收到的消息
    Text3.Text = xx
    If InStr(1, xx, "HTTP/1.0 100") Or InStr(1, xx, "HTTP/1.1 100") Then
        计时 = 1            '重新计时
        Exit Sub
    End If

你应该能看懂的.后面就是对这个XX 进行处理的.

HTTP/1.0 100 或 HTTP/1.1 100 在 HTTP 协议里,是服务器告诉客户端,请继续等待服务器处理结果的一个消息标志.



授人于鱼,不如授人于渔
早已停用QQ了
2010-03-22 14:02
ta8607
Rank: 4
等 级:业余侠客
帖 子:377
专家分:244
注 册:2007-9-22
得分:0 
收到,謝謝您!!

不理会流言蜚语,努力做好份内事情,只做自己.
2010-03-23 08:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-300152-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.258586 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved