Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: llAudioslavell en 24 Enero 2012, 17:54 pm



Título: Aplicacion utilizando Socket Asincrono
Publicado por: llAudioslavell en 24 Enero 2012, 17:54 pm
me vi obligado crear un nuevo post ya que el anterio no me lo respondian ...
bueno ya he aclarado algunas dudas despues de haber leido tanto

Encontre muchos tutoriales en Youtube y en google y llegue a terminar mi aplicacion utilizando Hilos,ya que mas he encontrado tutoriales con socket sincronos, pero ahora lo que quiero es utilizar socket asincronos.. quiero llegar a entender bien la diferencia entre estos 2 y de esta manera lograre entenderlo....ayer empeze con el proyecto guiandome de un tutorial en ingles:

Servidor:

    Dim SocketServer As Socket
    'Socket para aceptar la peticion del cliente
    Dim SocketClient As Socket
    'buffer
    Dim Bytesfrom(10024) As Byte

   Public Sub IniciarConeccion()

        SocketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        'aqui le doy la IP y el Puerto por donde se realizara la comunicacion
        Dim ip As IPEndPoint = New IPEndPoint(IPAddress.Any, 1863)
        SocketServer.Bind(ip)
        'la cantidad de clientes (5)
        SocketServer.Listen(5)
        'con esto acepto cualquier peticion
        SocketServer.BeginAccept(New AsyncCallback(AddressOf Aceptar), Nothing)

    End Sub

    Private Sub Aceptar(ByVal acp As IAsyncResult)

        SocketClient = SocketServer.EndAccept(acp)
        'siguo aceptando peticiones del cliente
        SocketServer.BeginAccept(New AsyncCallback(AddressOf Aceptar), Nothing)

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Call IniciarConeccion()
   End Sub



Cliente:


Public Class Form1
    Dim Bytesfrom(10024) As Byte
    Dim SocketClient As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    Private Sub Conectar_CS()

        Dim IPAddres As IPAddress
        IPAddres = IPAddress.Parse(txt_ip.Text)
        Dim PuertoIP As IPEndPoint = New IPEndPoint(IPAddres, 1863)
        'me conecto al servidor
        SocketClient.BeginConnect(PuertoIP, New AsyncCallback(AddressOf Conectar), Nothing)
    End Sub

    Private Sub Conectar(ByVal ar As IAsyncResult)
        SocketClient = ar.AsyncState
        SocketClient.EndConnect(ar)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call Conectar_CS()
    End Sub


falta mas codigo para enviar y recibir mensajes pero yo quize hacerlo por partes.. o sea, que primero solo me mande un mensaje informandome que ya se establecio la conexión.. despues ya avanzar con la mensajeria y esas cosas...
Ahora esto lo he probado en mis 2 ordenadores y nada .... tambien probe  esto en el servidor y en el cliente .. solo que en el cliente lo cambie por SocketCliente.conne... bla bla:

     If SocketServer.Connected = True Then
            MsgBox("Conectado. . . .")
        End If


en el servidor:
BeginAccepted-  acepta la peticion de algun cliente.
en el cliente:
BeginConnected- con esto el cliente envia una peticion al servidor para conectarse


pero  nada... cuando trato de conectar el cliente con el servidor ni el mensaje y ni un error me da... =/  si algo esta mal en el codigo corriganme porfavor ya que el tutorial estaba en C# =/ ...

Espero sus aportes ya que este post tambien puede ayudar a otras personas que intenten crear este tipo de aplicacion....
Salu3 !! ^^






Título: Re: Aplicacion utilizando Socket Asincrono
Publicado por: 112358 en 20 Agosto 2013, 16:17 pm
Estoy renegando con lo mismo :-\


Título: Re: Aplicacion utilizando Socket Asincrono
Publicado por: Keyen Night en 27 Agosto 2013, 09:22 am
Los métodos asíncronos son una forma genérica de llevar la ejecución de un determinado método a un thread donde se ejecutara por separado del thread principal y regresara a él una vez haya terminado a través del método que se le haya indicado al iniciar.

La implementación de un método asíncrono es siempre la misma, para un método 'Ejemplo' que debe ejecutarse asicronicamente existe un Begin/EndEjemplo, el Begin siempre lleva la firma (parámetros adicionales, Callback, Object), los parámetros adicionales son los datos que necesita el método 'Ejemplo' para ser ejecutado, el Callback es la referencia al método que será llamado cuando la ejecución del método 'Ejemplo' termine, Object lo podemos usar como un canal extra para transmitir información que queramos usar luego terminar el procesamiento del método 'Ejemplo', al llamar al método 'BeginEjemplo' este llama asincronicamente al método 'Ejemplo', una vez que termina la ejecución es llamado el método al que se hacia referencia en el Callback, este método debe tener la firma (IAsyncResult) y debe llamar inmediatamente a 'EndEjemplo' pasandole como parámetro el IAsyncResult, IAsyncResult.AsyncState es una variable de tipo Object que contiene el objeto pasado al método 'BeginEjemplo', 'EndEjemplo' tiene como salida el mismo tipo que 'Ejemplo' y la salida del método 'EndEjemplo' será el resultado de haber ejecutado 'Ejemplo', cabe destacar los detalles importantes, todos las excepciones generadas en el método 'Ejemplo' serán redireccionadas y la lanzadas en el método 'EndEjemplo' así que es recomendable ejecutarlo en un bloque Try, el orden BeginEjemplo->Ejemplo->EndEjemplo, no se puede violar, no se pueden hacer 2 llamadas a 'BeginEjemplo' si haber cerrado antes la llamada anterior con el método 'EndEjemplo'.

Esta marcado con CheckForIllegalCrossThreadCalls = False, por que no es el fin exponer los delegados sino el funcionamiento de los sockets únicamente pero lo correcto es usar delegados para la comunicación con la UI.

Aquí hice un ejemplo básico pero completo en VB de la implementación de los Sockets asíncronos en un Chat, con control de errores y UI:

Souce Files
http://www.speedyshare.com/bFhrM/ChatExample.rar