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 !! ^^
Estoy renegando con lo mismo :-\
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