colabora.net_ utilizando sockets en vb .net - tilli, pablo d

9
Lo + nuevo Visual Basic 6 <Xaml /> HTML / Scripts ASP.NET Cómo en .NET ADO.NET Lenguajes .NET Foros Windows Colaboraciones el Guille, la Web del Visual Basic, C#, .NET y más... Utilizando Sockets en VB .NET [Enviar y recibir mensajes] Fecha: 12/Jul/04 (09/07/04) Autor: Tilli, Pablo D. [email protected] Las ofertas del Guille para alojamiento (hosting) de sitios web, seguramente los mejores precios del mercado Introducción Hoy quiero aportar un granito de arena escribiendo mi primer tutorial, para que el intercambio de información entre los desarrolladores siga creciendo día a día. Creo que es necesaria esta divulgación de conocimientos, ya que como es mi caso (y supongo el de muchas personas mas) fue uno de mis principales medios de aprendizaje. Si bien concurro a cursos y a la universidad, este camino tiene otras características que hacen mucho más llevadera la etapa de aprender, permitiendo manejar mejor los tiempos de cada uno. Bueno, ahora si es hora de explicar un poco de que vamos a hablar en este tutorial. La idea es poder implementar dos clases: Cliente y Servidor. Probablemente el nombre de las clases digan todo, pero igual voy explicar un poco mas de que se trata. Un objeto de la clase Cliente, podrá conectarse a un objeto de la clase Servidor, permitiendo el envió de mensajes en los dos sentidos (Cliente a Servidor y Servidor a Cliente). Esto puede ser útil en una gran cantidad de aplicaciones, donde se necesita una comunicación entre dos o más computadoras conectadas en red. Un poco de teoría Se que esto de la teoría muchas veces resulta aburrido, pero la verdad es importante tener una base teórica antes de ponerse a trabajar en el código: “Uno no puede codificar lo que no sabe”. Como dije al principio, el objetivo es lograr una conexión entre varias computadoras. Para esto necesitamos algún medio por el cual se pueda mantener una “conversación” entre las mismas. Aquí entran en juego los famosos “Sockets”, pero ¿Qué es un socket? ¿Qué es un socket? Seguramente habrás escuchado nombrar la palabra Socket muchas veces, y posiblemente te preguntaste que era, así que intentare sacar tu duda de la manera mas simple: un Socket es una relación entre un puerto de un equipo y Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE... 1 de 9 15/07/2015 22:44

Upload: marbimon

Post on 16-Dec-2015

231 views

Category:

Documents


0 download

DESCRIPTION

Utilización de sockets en Visual Basic.NET

TRANSCRIPT

  • Lo + nuevo Visual Basic 6 HTML / Scripts

    ASP.NET Cmo en .NET ADO.NET

    Lenguajes .NET Foros Windows Colaboraciones

    el Guille, la Web del Visual Basic, C#, .NET y ms...

    Utilizando Sockets enVB .NET[Enviar y recibir mensajes]

    Fecha: 12/Jul/04 (09/07/04)

    Autor: Tilli, Pablo D. [email protected]

    Las ofertasdel Guille

    para

    alojamiento

    (hosting) de

    sitios web,

    seguramentelos mejores

    precios del

    mercado

    Introduccin

    Hoy quiero aportar un granito de arena escribiendo mi primer tutorial, para que el intercambio de informacin entre

    los desarrolladores siga creciendo da a da. Creo que es necesaria esta divulgacin de conocimientos, ya que como

    es mi caso (y supongo el de muchas personas mas) fue uno de mis principales medios de aprendizaje. Si bien

    concurro a cursos y a la universidad, este camino tiene otras caractersticas que hacen mucho ms llevadera la

    etapa de aprender, permitiendo manejar mejor los tiempos de cada uno.

    Bueno, ahora si es hora de explicar un poco de que vamos a hablar en este tutorial. La idea es poder implementar

    dos clases: Cliente y Servidor. Probablemente el nombre de las clases digan todo, pero igual voy explicar un poco

    mas de que se trata. Un objeto de la clase Cliente, podr conectarse a un objeto de la clase Servidor, permitiendo el

    envi de mensajes en los dos sentidos (Cliente a Servidor y Servidor a Cliente).

    Esto puede ser til en una gran cantidad de aplicaciones, donde se necesita una comunicacin entre dos o ms

    computadoras conectadas en red.

    Un poco de teora

    Se que esto de la teora muchas veces resulta aburrido, pero la verdad es importante tener una base terica antes

    de ponerse a trabajar en el cdigo: Uno no puede codificar lo que no sabe.

    Como dije al principio, el objetivo es lograr una conexin entre varias computadoras. Para esto necesitamos algn

    medio por el cual se pueda mantener una conversacin entre las mismas. Aqu entran en juego los famosos

    Sockets, pero Qu es un socket?

    Qu es un socket?

    Seguramente habrs escuchado nombrar la palabra Socket muchas veces, y posiblemente te preguntaste que era,

    as que intentare sacar tu duda de la manera mas simple: un Socket es una relacin entre un puerto de un equipo y

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    1 de 9 15/07/2015 22:44

  • el puerto de otro equipo. Ahora nombre la palabra puerto, pero de que se trata esto de los puertos?

    Qu es un puerto?

    Los puertos son bsicamente, una entrada/salida de informacin. Estos se encuentran identificados por un nmero

    entero y muchos se encuentran reservados para determinadas tareas, por ejemplo: el puerto 80 es para un servidor

    web.

    Conclusin

    Ahora bien, para que nos sirve saber que es un Socket y un Puerto (Al menos tener una idea de que son). Si

    miramos con atencin nos daremos cuenta que es justo lo que necesitamos para nuestro propsito.

    Tendremos un objeto de la clase Servidor, que creara un Socket que se quedara escuchando en un puerto que

    elijamos nosotros. El servidor seria un extremo del Socket, pero para que un Socket este realmente completo

    necesitamos otro extremo, que obviamente sern objetos de la clase Cliente, que se conectaran al puerto del equipo

    donde este el objeto servidor.

    Si todava no queda del todo claro, slo segu leyendo y todo se ira aclarando de a poco, cuando veamos algo de

    cdigo.

    Manos a la obra

    Antes de mostrar el cdigo, les voy a describir las propiedades, mtodos y eventos de las clases a implementar.

    El Servidor

    Propiedades

    PuertoDeEscucha() As String

    Establece/devuelve el puerto donde se quiere que el servidor quede escuchando.

    Mtodos

    Escuchar()

    Inicia el proceso de escuchar peticiones de conexin de parte de los clientes, en el puerto establecido en la

    propiedad PuertoDeEscucha.

    ObtenerDatos(ByVal IDCliente As Net.IPEndPoint) As String

    Obtiene los ltimos datos enviados por el cliente especificado.

    Cerrar(ByVal IDCliente As Net.IPEndPoint)

    Cierra la conexin con el cliente especificado.

    Cerrar()

    Cierra todas las conexiones abiertas con los clientes.

    EnviarDatos(ByVal IDCliente As Net.IPEndPoint, ByVal Datos As String)

    Enva un mensaje al cliente especificado.

    EnviarDatos(ByVal Datos As String)

    Enva un mensaje a todas los clientes.

    Eventos

    NuevaConexion(ByVal IDTerminal As Net.IPEndPoint)

    Se produce cuando un Cliente se conecta al Servidor, y nos devuelve un ID, para que podamos identificarlo mas

    tarde.

    DatosRecibidos(ByVal IDTerminal As Net.IPEndPoint)

    Se produce cuando un Cliente nos enva un mensaje. Para obtener los datos recibidos, usaremos el mtodo

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    2 de 9 15/07/2015 22:44

  • ObtenerDatos pasndole como parmetro el ID del cliente.

    ConexionTerminada(ByVal IDTerminal As Net.IPEndPoint)

    Nos avisa que se ha cerrado la conexin con el Cliente recibido como parmetro.

    El Cliente

    Propiedades

    IPDelHost() As String

    Establece/devuelve la direccin IP (o el nombre DNS) del equipo donde se encuentra el objeto de la clase

    Servidor.

    PuertoDelHost() As String

    Establece/devuelve el numero de puerto en el que estar escuchando el objeto de la clase Servidor al cual nos

    queremos conectar.

    Mtodos

    Conectar()

    Permite conectarse al objeto Servidor que se encuentra escuchando en la direccin especificada por la propiedad

    IPDelHost en el puerto establecido en la propiedad PuertoDelHost.

    EnviarDatos(ByVal Datos As String)

    Enva un mensaje al objeto de la clase Servidor a la que se este conectado.

    Eventos

    ConexionTerminada()

    Se produce cuando se termina la conexin con el objeto Servidor.

    DatosRecibidos(ByVal Datos As String)

    Nos avisa que el servidor nos ha enviado un mensaje, y el mismo se encuentra en el parmetro Datos.

    Al fin, ahora si llego la hora de ver cdigo empecemos.

    Cdigo de la clase Servidor

    Imports SystemImports System.ThreadingImports System.Net.SocketsImports System.IOImports System.Text

    Public Class WinSockServer

    #Region "ESTRUCTURAS"Private Structure InfoDeUnCliente

    'Esta estructura permite guardar la informacin sobre un cliente

    Public Socket As Socket 'Socket utilizado para mantener la conexion con el clientePublic Thread As Thread 'Thread utilizado para escuchar al clientePublic UltimosDatosRecibidos As String 'Ultimos datos enviados por el cliente

    End Structure#End Region

    #Region "VARIABLES"Private tcpLsn As TcpListenerPrivate Clientes As New Hashtable() 'Aqui se guarda la informacion de todos los clientes

    conectadosPrivate tcpThd As ThreadPrivate IDClienteActual As Net.IPEndPoint 'Ultimo cliente conectadoPrivate m_PuertoDeEscucha As String

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    3 de 9 15/07/2015 22:44

  • #End Region

    #Region "EVENTOS"Public Event NuevaConexion(ByVal IDTerminal As Net.IPEndPoint)Public Event DatosRecibidos(ByVal IDTerminal As Net.IPEndPoint)Public Event ConexionTerminada(ByVal IDTerminal As Net.IPEndPoint)

    #End Region

    #Region "PROPIEDADES"Property PuertoDeEscucha() As String

    GetPuertoDeEscucha = m_PuertoDeEscucha

    End Get

    Set(ByVal Value As String)m_PuertoDeEscucha = Value

    End SetEnd Property

    #End Region

    #Region "METODOS"

    Public Sub Escuchar()tcpLsn = New TcpListener(PuertoDeEscucha)'Inicio la escuchatcpLsn.Start()

    'Creo un thread para que se quede escuchando la llegada de un clientetcpThd = New Thread(AddressOf EsperarCliente)tcpThd.Start()

    End Sub

    Public Function ObtenerDatos(ByVal IDCliente As Net.IPEndPoint) As StringDim InfoClienteSolicitado As InfoDeUnCliente

    'Obtengo la informacion del cliente solicitadoInfoClienteSolicitado = Clientes(IDCliente)

    ObtenerDatos = InfoClienteSolicitado.UltimosDatosRecibidosEnd Function

    Public Sub Cerrar(ByVal IDCliente As Net.IPEndPoint)Dim InfoClienteActual As InfoDeUnCliente

    'Obtengo la informacion del cliente solicitadoInfoClienteActual = Clientes(IDCliente)

    'Cierro la conexion con el clienteInfoClienteActual.Socket.Close()

    End Sub

    Public Sub Cerrar()Dim InfoClienteActual As InfoDeUnCliente

    'Recorro todos los clientes y voy cerrando las conexionesFor Each InfoClienteActual In Clientes.Values

    Call Cerrar(InfoClienteActual.Socket.RemoteEndPoint)Next

    End Sub

    Public Sub EnviarDatos(ByVal IDCliente As Net.IPEndPoint, ByVal Datos As String)Dim Cliente As InfoDeUnCliente

    'Obtengo la informacion del cliente al que se le quiere enviar el mensajeCliente = Clientes(IDCliente)

    'Le envio el mensajeCliente.Socket.Send(Encoding.ASCII.GetBytes(Datos))

    End Sub

    Public Sub EnviarDatos(ByVal Datos As String)Dim Cliente As InfoDeUnCliente

    'Recorro todos los clientes conectados, y les envio el mensaje recibido'en el parametro DatosFor Each Cliente In Clientes.Values

    EnviarDatos(Cliente.Socket.RemoteEndPoint, Datos)Next

    End Sub

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    4 de 9 15/07/2015 22:44

  • #End Region

    #Region "FUNCIONES PRIVADAS"Private Sub EsperarCliente()

    Dim InfoClienteActual As InfoDeUnCliente

    With InfoClienteActual

    While True'Cuando se recibe la conexion, guardo la informacion del cliente

    'Guardo el Socket que utilizo para mantener la conexion con el cliente.Socket = tcpLsn.AcceptSocket() 'Se queda esperando la conexion de un cliente

    'Guardo el el RemoteEndPoint, que utilizo para identificar al clienteIDClienteActual = .Socket.RemoteEndPoint

    'Creo un Thread para que se encargue de escuchar los mensaje del cliente.Thread = New Thread(AddressOf LeerSocket)

    'Agrego la informacion del cliente al HashArray Clientes, donde esta la'informacion de todos estosSyncLock Me

    Clientes.Add(IDClienteActual, InfoClienteActual)End SyncLock

    'Genero el evento Nueva conexionRaiseEvent NuevaConexion(IDClienteActual)

    'Inicio el thread encargado de escuchar los mensajes del cliente.Thread.Start()

    End While

    End With

    End Sub

    Private Sub LeerSocket()Dim IDReal As Net.IPEndPoint 'ID del cliente que se va a escucharDim Recibir() As Byte 'Array utilizado para recibir los datos que lleganDim InfoClienteActual As InfoDeUnCliente 'Informacion del cliente que se va escucharDim Ret As Integer = 0

    IDReal = IDClienteActualInfoClienteActual = Clientes(IDReal)

    With InfoClienteActual

    While TrueIf .Socket.Connected Then

    Recibir = New Byte(100) {}

    Try'Me quedo esperando a que llegue un mensaje desde el clienteRet = .Socket.Receive(Recibir, Recibir.Length, SocketFlags.None)

    If Ret > 0 Then'Guardo el mensaje recibido.UltimosDatosRecibidos = Encoding.ASCII.GetString(Recibir)Clientes(IDReal) = InfoClienteActual

    'Genero el evento de la recepcion del mensajeRaiseEvent DatosRecibidos(IDReal)

    Else'Genero el evento de la finalizacion de la conexionRaiseEvent ConexionTerminada(IDReal)Exit While

    End If

    Catch e As ExceptionIf Not .Socket.Connected Then

    'Genero el evento de la finalizacion de la conexionRaiseEvent ConexionTerminada(IDReal)Exit While

    End IfEnd Try

    End IfEnd While

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    5 de 9 15/07/2015 22:44

  • Call CerrarThread(IDReal)End With

    End Sub

    Private Sub CerrarThread(ByVal IDCliente As Net.IPEndPoint)Dim InfoClienteActual As InfoDeUnCliente

    'Cierro el thread que se encargaba de escuchar al cliente especificadoInfoClienteActual = Clientes(IDCliente)

    TryInfoClienteActual.Thread.Abort()

    Catch e As ExceptionSyncLock Me

    'Elimino el cliente del HashArray que guarda la informacion de los clientesClientes.Remove(IDCliente)

    End SyncLockEnd Try

    End Sub

    #End Region

    End Class

    Cdigo de la clase Cliente

    Imports SystemImports System.NetImports System.Net.SocketsImports System.ThreadingImports System.TextImports System.IO

    Public Class Cliente

    #Region "VARIABLES"Private Stm As Stream 'Utilizado para enviar datos al Servidor y recibir datos del mismoPrivate m_IPDelHost As String 'Direccion del objeto de la clase ServidorPrivate m_PuertoDelHost As String 'Puerto donde escucha el objeto de la clase Servidor

    #End Region

    #Region "EVENTOS"Public Event ConexionTerminada()Public Event DatosRecibidos(ByVal datos As String)

    #End Region

    #Region "PROPIEDADES"Public Property IPDelHost() As String

    GetIPDelHost = m_IPDelHost

    End Get

    Set(ByVal Value As String)m_IPDelHost = Value

    End SetEnd Property

    Public Property PuertoDelHost() As StringGet

    PuertoDelHost = m_PuertoDelHostEnd GetSet(ByVal Value As String)

    m_PuertoDelHost = ValueEnd Set

    End Property#End Region

    #Region "METODOS"Public Sub Conectar()

    Dim tcpClnt As TcpClientDim tcpThd As Thread 'Se encarga de escuchar mensajes enviados por el Servidor

    tcpClnt = New TcpClient()'Me conecto al objeto de la clase Servidor,

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    6 de 9 15/07/2015 22:44

  • ' determinado por las propiedades IPDelHost y PuertoDelHosttcpClnt.Connect(IPDelHost, PuertoDelHost)Stm = tcpClnt.GetStream()

    'Creo e inicio un thread para que escuche los mensajes enviados por el ServidortcpThd = New Thread(AddressOf LeerSocket)tcpThd.Start()

    End Sub

    Public Sub EnviarDatos(ByVal Datos As String)Dim BufferDeEscritura() As Byte

    BufferDeEscritura = Encoding.ASCII.GetBytes(Datos)

    If Not (Stm Is Nothing) Then'Envio los datos al ServidorStm.Write(BufferDeEscritura, 0, BufferDeEscritura.Length)

    End IfEnd Sub

    #End Region

    #Region "FUNCIONES PRIVADAS"Private Sub LeerSocket()

    Dim BufferDeLectura() As Byte

    While TrueTry

    BufferDeLectura = New Byte(100) {}'Me quedo esperando a que llegue algun mensajeStm.Read(BufferDeLectura, 0, BufferDeLectura.Length)

    'Genero el evento DatosRecibidos, ya que se han recibido datos desde elServidor

    RaiseEvent DatosRecibidos(Encoding.ASCII.GetString(BufferDeLectura))Catch e As Exception

    Exit WhileEnd Try

    End While

    'Finalizo la conexion, por lo tanto genero el evento correspondienteRaiseEvent ConexionTerminada()

    End Sub#End Region

    End Class

    Cmo utilizar las clases?

    Bueno, hemos terminado con lo que se refiere al cdigo de las clases Cliente y Servidor, pero antes de terminar con

    el tutorial vamos a ver un pequeo ejemplo de como utilizarlas. En mi caso tengo la clase Cliente por un lado

    (Cliente.dll) y el Servidor por el otro (Servidor.dll). Lo que vamos ha hacer en este ejemplo es crear dos pequeas

    aplicaciones donde una se quede escuchando (El Servidor), y otra que se conecta a la que escucha (Cliente). Ambas

    podrn enviar y recibir mensajes.

    Aplicacin Servidor

    Nota: Se debe establecer una referencia a Servidor.dll.

    Public Class Form1Inherits System.Windows.Forms.Form

    " Cdigo generado por el Diseador de Windows Forms "

    Dim WithEvents WinSockServer As New Servidor()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    7 de 9 15/07/2015 22:44

  • With WinSockServer'Establezco el puerto donde escuchar.PuertoDeEscucha = 8050

    'Comienzo la escucha.Escuchar()

    End WithEnd Sub

    Private Sub WinSockServer_NuevaConexion(ByVal IDTerminal As System.Net.IPEndPoint) HandlesWinSockServer.NuevaConexion

    'Muestro quien se conectoMsgBox("Se ha conectado un nuevo cliente desde la IP= " & IDTerminal.Address.ToString &

    _",Puerto = " & IDTerminal.Port)

    End Sub

    Private Sub WinSockServer_ConexionTerminada(ByVal IDTerminal As System.Net.IPEndPoint)Handles WinSockServer.ConexionTerminada

    'Muestro con quien se termino la conexionMsgBox("Se ha desconectado el cliente desde la IP= " & IDTerminal.Address.ToString & _

    ",Puerto = " & IDTerminal.Port)

    End Sub

    Private Sub WinSockServer_DatosRecibidos(ByVal IDTerminal As System.Net.IPEndPoint) HandlesWinSockServer.DatosRecibidos

    'Muestro quien envio el mensajeMsgBox("Nuevo mensaje desde el cliente de la IP= " & IDTerminal.Address.ToString & _

    ",Puerto = " & IDTerminal.Port )

    'Muestro el mensaje recibidoCall MsgBox(WinSockServer.ObtenerDatos(IDTerminal))

    End Sub

    Private Sub btnEnviarMensaje_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnEnviarMensaje.Click

    'Envio el texto escrito en el textbox txtMensaje a todos los clientesWinSockServer.EnviarDatos(txtMensaje.Text)

    End SubEnd Class

    Aplicacin Cliente

    Nota: Se debe establecer una referencia a Cliente.dll.

    Public Class Form1Inherits System.Windows.Forms.Form

    " Cdigo generado por el Diseador de Windows Forms "

    Dim WithEvents WinSockCliente As New Cliente

    Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnConectar.Click

    With WinSockCliente'Determino a donde se quiere conectar el usuario.IPDelHost = txtIP.Text.PuertoDelHost = txtPuerto.Text

    'Me conecto.Conectar()

    'Deshabilito la posibilidad de conexion

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    8 de 9 15/07/2015 22:44

  • txtIP.Enabled = FalsetxtPuerto.Enabled = FalsebtnConectar.Enabled = False

    'Habilito la posibilidad de enviar mensajesbtnEnviarMensaje.Enabled = TruetxtMensaje.Enabled = True

    End WithEnd Sub

    Private Sub WinSockCliente_DatosRecibidos(ByVal datos As String) HandlesWinSockCliente.DatosRecibidos

    MsgBox("El servidor envio el siguiente mensaje: " & datos)End Sub

    Private Sub WinSockCliente_ConexionTerminada() Handles WinSockCliente.ConexionTerminadaMsgBox("Finalizo la conexion")

    'Habilito la posibilidad de una reconexiontxtIP.Enabled = TruetxtPuerto.Enabled = TruebtnConectar.Enabled = True

    'Deshabilito la posibilidad de enviar mensajesbtnEnviarMensaje.Enabled = FalsetxtMensaje.Enabled = False

    End Sub

    Private Sub btnEnviarMensaje_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnEnviarMensaje.Click

    'Envio lo que esta escrito en la caja de texto del mensajeWinSockCliente.EnviarDatos(txtMensaje.Text)

    End Sub

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e AsSystem.ComponentModel.CancelEventArgs) Handles MyBase.Closing

    EndEnd Sub

    End Class

    Conclusin

    Como conclusin, creo que si bien queda bastante por hacer (Validaciones, agregar mayor funcionalidad a las clases,

    etc.) este tutorial puede ser considerado como una introduccin a la utilizacin de Sockets, que cubre lo bsico para

    lograr una comunicacin entre aplicaciones que se encuentran en distintas computadoras.

    Quisiera que cualquier duda, sugerencia, crtica, mejora o cualquier otra cosa, me la hagan llegar mi correo

    electrnico ([email protected]).

    Espero, que este tutorial sea el primero de una larga lista, y espero tambin que a partir de las crticas que vaya

    recibiendo, pueda ir mejorando la manera de presentar el tutorial.

    Colabora.NET: Utilizando Sockets en VB .NET - Tilli, Pablo D. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNE...

    9 de 9 15/07/2015 22:44