1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sockets e VB 6

Discussão em 'Programação' iniciada por spastikman, 24 de Agosto de 2006. (Respostas: 1; Visualizações: 1254)

  1. spastikman

    spastikman Banido

    Código:
    Private Sub Command1_Click()
    Winsock1.RemoteHost = "techzonept.com"
    Winsock1.RemotePort = 80
    
    
    Winsock1.Connect
    
    Do While Winsock1.State <> sckConnected
    DoEvents
    Loop
    
    End Sub
    
    Private Sub Winsock1_Connect()
    header = header + "GET /index.php HTTP/1.1" + vbCrLf
    header = header + "Host: techzonept.com" + vbCrLf
    header = header + vbCrLf + vbCrLf
    
    Winsock1.SendData header
    End Sub
    
    
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Winsock1.GetData dump, vbString
    MsgBox Len(dump)
    MsgBox dump
    Winsock1.Close
    End Sub
    
    
    Por necessidade, tive de aprender a dar uns toques em VB (blargh :().

    O código que está acima serve para retornar o código html da página index.php aqui do forum.

    O que acontece é que sempre que retorno dados pelo winsock1.getdata, o tamanho maximo da string criada é de 1452 bytes.

    Ora se o index.php tem por exemplo 10 kbytes, a string vai ser truncada e eu preciso de receber o ficheiro completo

    Alguem sabe como contornar isto ?
     
  2. spastikman

    spastikman Banido

    depois de partir muito cascalho arranjei uma solução :

    Código:
    Public dump As String
    Public tmp As String
    Public html As String
    
    Option Explicit
    
    Private Sub Command1_Click()
    socket.Close
    socket.RemoteHost = "www.techzonept.com"
    socket.RemotePort = "80"
    html = html + "GET /index.php HTTP/1.1" + vbCrLf
    html = html + "Host: techzonept.com" + vbCrLf
    html = html + vbCrLf
    
    socket.Connect
    
    Do While socket.State <> sckClosing
    DoEvents
    Loop
    
    socket.Close
    
    MsgBox dump
    
    MsgBox socket.State
    End Sub
    
    
    Private Sub socket_Connect()
    socket.SendData html
    End Sub
    
    Private Sub socket_DataArrival(ByVal bytesTotal As Long)
    Dim test
    
    socket.GetData test, vbString
    dump = dump + test
    
    End Sub
    
    basta ir concatenando os "chunks que vão chegando enquanto a ligação se mantiver activa.

    O doevents força o codigo a ir executando o dataarrival enquanto o servidor não cortar a conexão.

    assim sendo ele vai concatenando todos os valores que vai recebendo e só quando o servidor termina a ligação é que mostra o conteudo.

    Espero que seja util para alguem.
     

Partilhar esta Página