Aplicacion utilizando Socket Asincrono

Iniciado por llAudioslavell, 24 Enero 2012, 17:54 PM

0 Miembros y 1 Visitante están viendo este tema.

llAudioslavell

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 !! ^^





112358


Keyen Night

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
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...