
GoLDBeRG (Ex-Member)
Expert
    
Messaggi: 331
Iscritto: 19/12/2005
|
Codice sorgente - presumibilmente VB.NET |
Imports System Imports System.IO Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Text Public Class download Public filegen As Long Dim sock As Socket Dim down As NetworkStream Dim altro(1024) As Byte Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim h As New Thread(AddressOf vedi) h.Start() End Sub Public Sub vedi() sock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) sock.Connect("colossus.altervista.org", 80) ' sock.Connect("www.artfiles.org", 80) down = New NetworkStream(sock) ' send("OPTIONS http://www.artfiles.org/knoppix/KNOPPIX_V5.1.1CD-2007-01-04-EN.iso") sock.BeginReceive(altro, 0, altro.Length, SocketFlags.None, New AsyncCallback(AddressOf ricevi), Nothing) send("HEAD http://colossus.altervista.org/file/Colossus.zip") End Sub Public Sub send(ByVal data As String) If data.EndsWith(vbCrLf) = False Then data &= vbCrLf End If Dim byt() As Byte = Encoding.ASCII.GetBytes(data) down.Write(byt, 0, byt.Length) down.Flush() End Sub Public Sub ricevi(ByVal ar As IAsyncResult) Dim int As Integer = sock.EndReceive(ar) If int > 1 Then Dim str As String = Encoding.ASCII.GetString(altro) MsgBox(str) sock.BeginReceive(altro, 0, altro.Length, SocketFlags.None, New AsyncCallback(AddressOf ricevi), Nothing) Else Exit Sub End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Try Label2.Text = Int((impo.quanti / 1024) / 5) impo.quanti = 0 Catch ex As Exception End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim p As New conn Dim thr As New Thread(AddressOf p.scarica) thr.Start() End Sub End Class
|
vedi questa stringa qui
Codice sorgente - presumibilmente Plain Text |
send("HEAD http://colossus.altervista.org/file/Colossus.zip")
|
al posto di HEAD se metti GET ti manda direttamente il file... quindi ricevi caratteri illeggibili... se metti OPTIONS da Errore... se metti HEAD ti sputa in faccia.... ci deve essere un comando per farmi dire quanto è grande..... |
|

riseofapocalypse (Ex-Member)
Pro
    
Messaggi: 150
Iscritto: 08/07/2009
|
Leggi un po' qua: http://it.wikipedia.org/wiki/Http
In pratica per utilizzare il metodo GET si fa così:
Codice sorgente - presumibilmente Plain Text |
Send(System.Text.Encoding.ASCII.GetBytes("GET http://colossus.altervista.org/file/Colossus.zip HTTP/1.1" & vbNewLine & vbNewLine))
|
Ora il messaggio di errore è diverso: 400 Bad Request
|
|

GoLDBeRG (Ex-Member)
Expert
    
Messaggi: 331
Iscritto: 19/12/2005
|
richiesta errata? :|
|
|

riseofapocalypse (Ex-Member)
Pro
    
Messaggi: 150
Iscritto: 08/07/2009
|
Beh almeno adesso non dice che il comando è inutilizzabile! però dovrebbe funzionare, secondo le indicazioni di Wikipedia...
|
|

GoLDBeRG (Ex-Member)
Expert
    
Messaggi: 331
Iscritto: 19/12/2005
|
stavo pensando.... visto che col socket pure l'apache fa il cretino e non ci dice quanto è grande il file... se usiamo al posto dei sock i webclient? pero' sempre tanti come fossero socket.....
|
|

riseofapocalypse (Ex-Member)
Pro
    
Messaggi: 150
Iscritto: 08/07/2009
|
Non è colpa del Socket, anche usando Telnet da gli stessi problemi
Ho appena provato con il WebClient e indovina un po'...il Server accetta la richiesta! Evidentemente la Microsoft ha fatto in modo che i Socket non siano puri! -.-"
CI SONO RIUSCITO!
Codice sorgente - presumibilmente VB.NET |
Dim wc As New Net.WebClient Dim b1() As Byte = wc.Encoding.GetBytes("GET /file/Colossus.zip HTTP/1.1" & vbNewLine & vbNewLine) wc.OpenWrite("http://colossus.altervista.org/").Write(b1, 0, b1.Length) Dim s2 As IO.Stream = wc.OpenRead("http://colossus.altervista.org/file/Colossus.zip") Dim b2 As New List(Of Byte) For i As Integer = 0 To wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength) - 1 b2.Add(s2.ReadByte) Next IO. File. WriteAllBytes("C:\casa.zip", b2. ToArray)
|
wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength) è il numero di byte!  ora possiamo trovare il modo di dividere il file
Ultima modifica effettuata da riseofapocalypse il 11/07/2009 alle 10:31 |
|

GoLDBeRG (Ex-Member)
Expert
    
Messaggi: 331
Iscritto: 19/12/2005
|
ti ha mai detto nessuno che sei un genio ragazzo mio
|
|

riseofapocalypse (Ex-Member)
Pro
    
Messaggi: 150
Iscritto: 08/07/2009
|
Muhahaha grazie avevamo la soluzione sotto gli occhi
Ti informo che oggi, 11 Luglio 2009, quando cerco di ottenere:
Codice sorgente - presumibilmente Plain Text |
wc.ResponseHeaders(Net.HttpRequestHeader.ContentLength)
|
Mi da errore! -_-"
Codice sorgente - presumibilmente Plain Text |
InvalidOperationException non è stata gestita.
Questo insieme contiene intestazioni di risposta. Non può contenere l'intestazione di richiesta specificata.
|
Che stupido sono stato! Certo che non funzionava, utilizzavo un RequestHeader per ottenere il RespondeHeader! Invece è così:
Codice sorgente - presumibilmente Plain Text |
wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength)
|
Ultima modifica effettuata da riseofapocalypse il 11/07/2009 alle 10:27 |
|