Hasta las narices o mas abajo....

24/03/2005 - 13:56 por Ch0rY | Informe spam
asi estoy ya de vb.net

Haced el favor de explicarme xq no funciona esto
...
dim b as string
For a = 0 To bufferSize:b = b & Chr(myBufferBytes(a)):Next
...

y esto si

...
dim b as string
For a = 0 To bufferSize:msgbox(Chr(myBufferBytes(a))):Next
...

lo q intento es pasar el contenido de mybufferbytes en caracteres ascii,
a b.
De la 1ª forma no me pasa nada a b, y en la 2ª si muestra el caracter
ascii en el cuadro del mensage.

Donde me equivoco? Q hago mal?
el contenido de myBufferBytes() es un valor devuelto x un socket, no creo
q esto influya, pero ...

gracias

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
24/03/2005 - 14:59 | Informe spam
Hay varias cosas a tener en cuenta:

* "For a = 0 To bufferSize" itera bufferSize + 1 veces ¿tiene esa cantidad
de elementos el arreglo?
* Los strings son inmutables y por lo tanto al hacer la concatenacion se
debe crear uno nuevo. Por ese motivo si se hacen concatenaciones dentro de
un bucle es mejor utilizar un StringBuilder.
* Para hacer la conversion texto/bytes/text te conviene usar
System.Text.Enconding. Eso si, tiene que usar la misma codificacion que
usaste para convertir a bytes o la conversion puede no entender ciertos
caracteres. Ejemplo:

Dim ascii As System.Text.Encoding System.Text.Encoding.GetEncoding("ASCII")

myBufferBytes = ascii.GetBytes("ABC")
MessageBox.Show(ascii.GetString(myBufferBytes))

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
Respuesta Responder a este mensaje
#2 Ch0rY
24/03/2005 - 17:08 | Informe spam
"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> wrote in
news::

Hay varias cosas a tener en cuenta:

* "For a = 0 To bufferSize" itera bufferSize + 1 veces ¿tiene esa
cantidad de elementos el arreglo?



OK, aqui es un fallo mio, pero que no da error

* Los strings son inmutables y por lo tanto al hacer la concatenacion
se debe crear uno nuevo. Por ese motivo si se hacen concatenaciones
dentro de un bucle es mejor utilizar un StringBuilder.



StringBuilder, lo probare

* Para hacer la conversion texto/bytes/text te conviene usar
System.Text.Enconding. Eso si, tiene que usar la misma codificacion
que usaste para convertir a bytes o la conversion puede no entender
ciertos caracteres. Ejemplo:

Dim ascii As System.Text.Encoding > System.Text.Encoding.GetEncoding("ASCII")

myBufferBytes = ascii.GetBytes("ABC")
MessageBox.Show(ascii.GetString(myBufferBytes))




No se, lo recibo talcual,


este es el codigo completo

Dim myTcpClient As New TcpClient()
Dim myNetworkStream As NetworkStream

Dim buf As String
Dim a As Integer
myTcpClient.Connect("news.microsoft.com", 119)
myNetworkStream = myTcpClient.GetStream()
Dim bufferSize As Integer = myTcpClient.ReceiveBufferSize
Dim myBufferBytes(bufferSize) As Byte
myNetworkStream.Read(myBufferBytes, 1, bufferSize)

For a = 0 To bufferSize
buf = buf + Str(myBufferBytes(a)) + Chr(32)
Next

txtContent.Text = buf & vbCrLf

lo cogi de una web para hacer pruebas
Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
24/03/2005 - 22:13 | Informe spam
Prueba con este ejemplo que lee y escribe en la conexion para obtener el
listado de los grupos del servidor de news:

Public Class ListadoDeGrupos

Public Shared Sub main(ByVal args() As String)

Dim client As System.Net.Sockets.TcpClient
Dim stream As System.Net.Sockets.NetworkStream

Try

' Conecto al servidor
client = New Net.Sockets.TcpClient("msnews.microsoft.com",
119)

' Obtengo el stream
stream = client.GetStream()

Dim respuesta As String
Dim leido As Integer

' Obtener respuesta del servidor
respuesta = Recibir(stream)

If respuesta.StartsWith("200") Then ' OK?

' Enviar un comando al servidor para
' listar los grupos
Enviar(stream, "LIST" & Environment.NewLine)

Do

' Obtener respuesta
respuesta = Recibir(stream)

' Escribo la respuesta en la consola
Console.Write(respuesta)

' Sigo leyendo hasta el final del listado

Loop Until respuesta.IndexOf(Environment.NewLine & "." &
Environment.NewLine) > -1

End If

Finally

' Cierro el stream y la conexion
If Not stream Is Nothing Then stream.Close()
If Not client Is Nothing Then client.Close()

End Try

End Sub

Private Shared Sub Enviar( _
ByVal stream As System.Net.Sockets.NetworkStream, _
ByVal texto As String)

' Obtengo un Encoding para ASCII
Dim ascii As System.Text.Encoding System.Text.Encoding.GetEncoding("ascii")

Dim data() As Byte

' Convierto el texto a bytes con codificacion ASCII
data = ascii.GetBytes(texto)

' Escribo en el stream
stream.Write(data, 0, data.Length)

End Sub

Private Shared Function Recibir(ByVal stream As
System.Net.Sockets.NetworkStream) As String

' Obtengo un Encoding para ASCII
Dim ascii As System.Text.Encoding System.Text.Encoding.GetEncoding("ascii")
Dim leido As Integer
Dim buffer(8191) As Byte ' 8Kb
Dim respuesta As New System.Text.StringBuilder(8192)

Do

' Leo del stream
leido = stream.Read(buffer, 0, buffer.Length)

' Devolvio algo el stream?
If leido > 0 Then

' Convierto los bytes a un String usando codificacion
ASCII
respuesta.Append(ascii.GetString(buffer, 0, leido))

End If

' Sigo leyendo hasta que se haya
' leido todo el stream

Loop Until leido < buffer.Length

Return respuesta.ToString

End Function

End Class

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
Respuesta Responder a este mensaje
#4 Ch0rY
25/03/2005 - 11:30 | Informe spam
Eduardo, t'aspasao, no te imaginas las vueltas q he dado para buscar algo
asi, y vas en un momento y me lo pasas.

Ahora toca estudiarlo bien, para hacer los arreglos y,u,o, apaños, para
hacer lo q quiero.

Una cosa mas, yo uso la edicion de aprendizaje, x lo q la documentacion es
mas bien escasa, podrias decirme/recomendarme un buen libro de referencia
donde pueda encontrar, los distintos namespaces, clases, metodos, eventos
..., creo q mi problema biene de la falta de esos conocimientos?

muchas gracias
Respuesta Responder a este mensaje
#5 Eduardo A. Morcillo [MS MVP VB]
25/03/2005 - 14:36 | Informe spam
La documentacion puedes encontrarla aqui:

MSDN Library en español
http://msdn.microsoft.com/library/spa/

Otros sitios en los que puedes encontrar informacion:

http://www.microsoft.com/spanish/msdn/
http://www.elguille.info
http://www.willydev.net/
http://msdn.microsoft.com/vbasic/ (en ingles)

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida