Visual Basic.NET - enviar estructura con sockets

 
Vista:

enviar estructura con sockets

Publicado por sergio (16 intervenciones) el 18/11/2004 11:56:11
hola
he conseguido enviar cadenas de texto asi:

dim analisis as string = "hola"
Dim msg As Byte() = Encoding.ASCII.GetBytes(analisis)
handler.Send(msg)

y las recibo asi:
Dim mensaje_rec_bytes(5000) As Byte
Dim mensaje_rec As String = ""

Dim bytes As Int32 = s.Receive(mensaje_rec_bytes, mensaje_rec_bytes.Length, 0)

While bytes > 0
mensaje_rec = mensaje_rec + ascii.GetString(mensaje_rec_bytes, 0, bytes)
bytes = s.Receive(mensaje_rec_bytes, mensaje_rec_bytes.Length, 0)
End While

¿hay alguna foma de enviar estructuras y recibirlas correctamente o solo se pude con cadenas? gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:enviar estructura con sockets

Publicado por Edgar (1501 intervenciones) el 18/11/2004 12:58:40
Hola

Si no me equivoco tienes que hacer tu estructura serializable, para eso colocas el <Serializable()> antes de la definición de la estructura o clase

Debes importar System.Runtime.Serialization para que puedas usar este atributo.

Debes importar tambien System.Runtime.Serialization.Formatters.Binary para que puedas serializar el objeto... lo haces asi

Luego debes hacer algo parecido a esto

Dim formatter As New BinaryFormatter
Dim ms As New MemoryStream

Try
formatter.Serialize(ms, addresses)
Catch e As SerializationException
Throw
End Try

Luego puedes usar el metodo ToArray del memorystream para obtener la cadena de bytes que usas para enviarlo a través del socket

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:enviar estructura con sockets

Publicado por sergio (16 intervenciones) el 18/11/2004 21:38:28
hola
Creo que he conseguido serializar la estructura , pero no se como se deserializa. aki pongo el codigo, haber si alguien me puede echar una ayuda. y gracias por la ayuda anterior.

programa servidor ejemplo:

<Serializable()> Structure prueba
Const cad1 As String = \"hola\"
Const cad2 As String = \"hola2\"
Dim cad3 As String
End Structure

Dim informa As prueba

informa.cad3 = \"hola3\"
Dim formatter As New BinaryFormatter
Dim ms As New MemoryStream

Try
formatter.Serialize(ms, informa)
Catch ex As SerializationException
Throw
End Try

Dim msg As Byte() = Encoding.ASCII.GetBytes(informa.ToString)
handler.Send(msg)

programa cliente:

Structure prueba
Const cad1 As String
Const cad2 As String
Dim cad3 As String
End Structure

Dim informa As prueba

Dim bytes As Int32 = s.Receive(mensaje_rec_bytes, mensaje_rec_bytes.Length, 0)

Dim formatter As New BinaryFormatter
Dim ms As New MemoryStream

Try
informa = formatter.Deserialize(ms)
Catch ex As SerializationException
Throw
End Try

me dice que deserializo una estrutura vacia, pero es que no se como se hace.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:enviar estructura con sockets

Publicado por Edgar (1501 intervenciones) el 19/11/2004 13:43:29
Hola

El proceso es similar.. pero a la inversa.. el contenido del socket lo colocas en un memorystream, y luego creas un binaryformatter, pero en este caso usas el método Deserialize para que te cree el objeto que necesitas...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar