如下一段代码,可以下载新浪网主页数据,但我要将它改一下,将主机地址设置成为我公司内网中的一个主机服务器地址10.1.13.254:355(端口号).并且从服务器中下载相关数据.(正常应该通过一种程序中做一个指令:al/12345 来得到数据.数据未加密为明文),但我的程序发送指令正常,但就是收不到数据.变量myall的值始终为空.请高人为我指点一下,最好将代码根据以上网络状况进行修改.谢谢.Option Explicit
Dim myall As StringPrivate Sub Command1_Click()
Text1.Text = myall
End SubPrivate Sub Command2_Click()
End
End SubPrivate Sub Form_Load()
'建立连接
Winsock1.Protocol = 0
Winsock1.RemoteHost = "218.30.66.123" '新浪IP地址
Winsock1.RemotePort = 80              '端口号
Winsock1.Connect
End SubPrivate Sub Winsock1_Close()
Winsock1.Close
End SubPrivate Sub winsock1_connect()
Dim strcommand As String
Dim strwebpage As String
strwebpage = "218.30.66.123"
strcommand = "GET" + strwebpage + "http/1.0" + vbCrLf
strcommand = strcommand + "accept/" + vbCrLf
strcommand = strcommand + "accept text/html" + vbCrLf
strcommand = strcommand + vbCrLf
Winsock1.SendData strcommand  ' 发送命令End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim webdata As String
Winsock1.GetData webdata, vbString
myall = myall + webdataEnd Sub

解决方案 »

  1.   

    你公司中的那个主机支持HTTP下载吗?
      

  2.   

    不支持HTTP服务.是客户端程序向服务器发出指令以获取数据.如在客户端发出al指令,服务器将数据发送至客户端并显示在客户端的文本框中.由于这个程序开发时未提供源代码,现需要重写该程序.
      

  3.   

    你用他的软件发送一下估计是你的请求格式不对 或者端口不对你用他的软件发送 然后试用wpe把包抓回来分析一下就可以了
      

  4.   

    端和IP肯定正确,如您所说那可能是请求格式不对,您的意思是启动WPE,再用原程序发送一次,通过捕捉封包来分析请求格式是吧?
      

  5.   

    对你这个是标准的http的请求格式如果他的请求格式不是这样的自然不能正确应答了
      

  6.   

    如果我捕捉到封包的请求格式,但是发送指令还是要用Winsock1.SendData "请求格式"  来发送吧,通过Winsock1.GetData webdata, vbString来下载,最后通过变量myall来提取到服务器端发来的数据?
      

  7.   

    Winsock1.GetData webdata, vbString
    这个不是下载只是收到对方发给你的包估计你是看的一个新浪的天气小偷改写的
    呵呵发送指令还是要用Winsock1.SendData "请求格式"  来发送吧
    但是切记最后需要
    strcommand = strcommand + vbCrLf
    发送前
      

  8.   

    先要把”请求格式“赋值给strcommand吧,也就是:
    strcommand="请求格式"
    strcommand = strcommand + vbCrLf
    Winsock1.SendData strcommand
    对吗?
      

  9.   

    封包已经抓下来了,分为2个部份,前面部份是发送给服务器的内容
    0000  01 00 00 17 00 00 00 01 4F 51 70 02 1B 0B 32 20    ........OQp...2 
    0010  00 0F 1E 64 61 20 03                               ...da .
    左边是16进制的内容,右边可能是一些控制字符加da的命令内容。
    这就是通过原程序发送da指令后,通过wpe抓包得到的东西。那么我在程序中的请求格式应该如何编写呢?请求格式是以16进制来写?还是以控制字符+指令来写?
      

  10.   

    实际的内容是
    01 00 00 17 00 00 00 01 4F 51 70 02 1B 0B 32 20 00 0F 1E 64 61 20 03
      

  11.   

    也就是说服务器应该接收16进制度的这些内容?
    Winsock1.SendData 01 00 00 17 00 00 00 01 4F 51 70 02 1B 0B 32 20 00 0F 1E 64 61 20 03  '发送命令?
      

  12.   

    我再重新整理了一下代码,是否正确?
    Option Explicit
    Dim myall As StringPrivate Sub Command1_Click()
    Text1.Text = myall
    End SubPrivate Sub Form_Load()
    '建立连接
    Winsock1.Protocol = 0
    Winsock1.RemoteHost = "10.14.10.1" '服务器IP地址
    Winsock1.RemotePort = 355             '端口号
    Winsock1.Connect
    End SubPrivate Sub Winsock1_Close()
    Winsock1.Close
    End SubPrivate Sub winsock1_connect()
    Dim strcommand As String
    strcommand = "01 00 00 17 00 00 00 01 4F 51 70 02 1B 0B 32 20 00 0F 1E 64 61 20 03
    " + vbCrLf
    strcommand = strcommand + vbCrLf
    Winsock1.SendData strcommand  ' 发送命令End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    On Error Resume Next
    Dim webdata As String
    Winsock1.GetData webdata, vbString
    myall = myall + webdataEnd Sub
      

  13.   

    这样是不对的因为01 00 00 17 00 00 00 01 4F 51 70 02 1B 0B 32 20 00 0F 1E 64 61 20 03不是16进制
    要转换成16进制的显示才可以其实你用这个软件发送一下用wpe抓下这个包就知道了如果和原先都一样就表示可以了
      

  14.   

    这就是用WPE抓包后显示的发送部分:指令是da0000  01 00 00 17 00 00 00 01 4F 51 70 02 1B 0B 32 20    ........OQp...2 
    0010  00 0F 1E 64 61 20 03                                         ...da .Winsock1.SendData 发送那部分?
      

  15.   

    你现在发送的是字符串
    而wpe抓的包是16进制数据
    那里是一回事
    要转换成16进制