Sockets e VB 6

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 ?
 
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.
 
Back
Topo