PDA

View Full Version : [VB.NET] Piccolo aiuto con una variabile Byte ...


race2
25-03-2005, 20:04
Ho tradotto un codice da C# a VB.NET

ho trovato un solo errore, non so come tradurre il rigo:

come si vede nel commento, in C# funziona cosi: '( in C# ) ---> Byte[] RecvBytes = new Byte[2256];


in VB.NET cosi non da errore ma non mi funziona
Dim RecvBytes(2256) As Byte


se faccio cosi mi dice che Byte non ha costruttori....
Dim RecvBytes As Byte New Byte(2256)


Quale e' il metodo giusto ???



PS. di seguito al codice VB.NET ho riportato l'originale commentato in C#




Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Module Module1

Sub Main()

'scelgo l'host
Dim IPHost As IPHostEntry = Dns.Resolve("localhost") 'IPHostEntry(IPHost = Dns.Resolve("localhost"))
Console.WriteLine(IPHost.HostName)

Dim aliases() As String = IPHost.Aliases 'string []aliases = IPHost.Aliases

Dim addr As IPAddress() = IPHost.AddressList 'IPAddress[] addr = IPHost.AddressList
Console.WriteLine(addr(0))

Dim ep As EndPoint = New IPEndPoint(addr(0), 80) 'EndPoint ep = new IPEndPoint(addr[0],80)

Dim sock As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 'Socket(sock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))

sock.Connect(ep)
If sock.Connected Then Console.WriteLine("OK")

Dim ASCII As Encoding = Encoding.ASCII 'Encoding = ASCII = Encoding.ASCII


Dim protocol As String = "HTTP/1.0" 'string protocol="HTTP/1.0" ;
Dim br As String = "\r\n" 'string br="\r\n" ;
Dim target As String = "/phpinfo.php" 'string target="/phpinfo.php" ;


Dim req_body As String = "" 'string req_body="" ;
req_body += "&to=5" 'req_body+="&to=5";


Dim headers As String = "POST " + target + " " + protocol + br 'string headers="POST "+target+" "+protocol+br ;
headers += "Content-Type: application/x-www-form-urlencoded" + br 'headers+="Content-Type: application/x-www-form-urlencoded"+br ;
headers += "Content-Length: " + req_body.Length.ToString + br + br 'headers+="Content-Length: "+req_body.Length+br+br ;


Dim ByteGet As Byte() = ASCII.GetBytes(headers + req_body) 'Byte[] ByteGet = ASCII.GetBytes(headers+req_body);

'( in C# ) ---> Byte[] RecvBytes = new Byte[2256];
Dim RecvBytes(2256) As Byte '= New Byte(2256) '### se faccio cosi mi dice che Byte non ha costruttori.... ###

sock.Send(ByteGet, ByteGet.Length, 0) 'sock.Send(ByteGet, ByteGet.Length, 0);
Dim bytes As Int32 = sock.Receive(RecvBytes, 0, RecvBytes.Length, 0) 'Int32 bytes = sock.Receive(RecvBytes,0, RecvBytes.Length, 0);
Dim strRetPage As String = "" 'string strRetPage="";
strRetPage = ASCII.GetString(RecvBytes, 0, RecvBytes.Length) 'strRetPage = ASCII.GetString(RecvBytes, 0,RecvBytes.Length);
Console.WriteLine(strRetPage)


strRetPage = Nothing 'strRetPage = null
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes) 'strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
While bytes > 0
bytes = sock.Receive(RecvBytes, 0, RecvBytes.Length, SocketFlags.Peek)
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)
Console.WriteLine(strRetPage)
End While
sock.Shutdown(SocketShutdown.Both)
sock.Close()


'STOP codice
Console.WriteLine()

End Sub

End Module

Brigante
26-03-2005, 08:38
Non conosco il C, comunque...
In VB sia 6.0 che .NET le variabili Byte accettano valori da 0 a 255. Scrivendo Dim RecvBytes(2256) As Byte stai creando un buffer dati da 2256 bytes.
Se non ho capito male questa variabile RecvBytes è utilizzata per "parcheggiarci" i dati in arrivo dal socket; uno sguardo veloce alla MSDN Library mi dice:


...
Dim bytes(1024) As Byte
s.Receive(bytes, 0, s.Available, SocketFlags.None)
...


Dove s è la tua sock e bytes è la tua RecvBytes.

Prova un pò...
:)

race2
26-03-2005, 10:22
Veroooo!!!

grazie mille, vado a provare, ciao!

race2
26-03-2005, 12:19
FUNZIONAAAA!!!

Ho pure portato il progetto in "Visuale" perche devo potere "popolare" una "ListView" con il risultato.


Un altro problemino:


1) Invio la Stringa per la Query a PHP, e fin qui' tutto OK!
2) Mi ritorna uno Stream di dati e cioe' un elenco di nomi di "Agenti" (vedi codice...)
3) Dovrei potere esplodere questa stringa di ritorno in tante sottostringhe contenenti un nome ciascuna, per poi popolarci la mia ListView

se fossi in PHP "esploderei la stringa dato un carattere da decidere", in un Array di dati, per poi fare un ciclo "foreach" Popolando la "ListView".

ma in VB.NET non so come si fa .........




Dim lipa As IPHostEntry = Dns.Resolve("localhost")
Dim addr As IPAddress() = lipa.AddressList
Dim lep As New IPEndPoint(lipa.AddressList(0), 80)
Dim s As New Socket(lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
Try
s.Connect(lep)
Catch e As Exception
MsgBox(("Exception Thrown: " + e.ToString()))
End Try

Dim br As String = vbCrLf
Dim protocol As String = "HTTP/1.0"
Dim target As String = "/phpinfo.php"

Dim body As String = "sql=SELECT Nome_Agente FROM Agenti"

Dim headers As String = "POST " & target & " " & protocol & br
headers += "Content-Type: application/x-www-form-urlencoded" & br
headers += "Content-Length: " & body.Length.ToString & br & br

Dim msg As Byte() = Encoding.ASCII.GetBytes(headers & body)
Dim i As Integer = s.Send(msg, 0, msg.Length, SocketFlags.None)


Dim RecvBytes(1024) As Byte
Dim strRetPage As String = Nothing
Dim ASCII As Encoding = Encoding.ASCII
Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)


'OUTPUT
MsgBox(Encoding.ASCII.GetString(RecvBytes))
s.Shutdown(SocketShutdown.Both)
s.Close()