Foro de elhacker.net

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



Título: Duda con Sockets sincrono y asincrono ..
Publicado por: llAudioslavell en 7 Enero 2012, 23:17 pm
hola bueno soy yo denuevo con mis dudas.... necesito tener todo claro para poder terminar perfectamente mi aplicacion cliente-servidor:

Socket sincriono:
-sockets que se bloquean hasta que han recibido toda la información  
-En este tipo de socket, cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion.

Socket asincrono
sockets que no se bloquean y tenemos q ver si nuestro buffer se ha llenado.

He aqui, he citado las definiciones de algunos usuarios, las mas claras, creo yo, pero creo haber entendido solo poco y quisiera que alguien de ustedes me explicara un poco mejor todo lo que he citado y me respondan algunas dudas:

-Con respecto a Socket sincriono:
- ¿ Que quiere decir con: Socket que se bloquean ?
- "hasta que han recibido toda la informacion" ¿ Esto se refiere que el mensaje que envio el cliente al servidor, ha llegado sin ningun problema ?

- "En este tipo de socket, cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion.", todo esto quiere decir que el cliente o servidor se  cuelga una vez que se alla recibido el mensaje (datos) ???

Con respecto a Socket asincrono:
- ¿ a que le llama buffer, que Clase en VB.NET es  y como funciona este ?

- y por ultimo.... normalmente cual de estos metodos es mas usado en la actualidad y por que... hay alguna ventaja ???

Se los agradeceria muchisimo ... no crean que quiero todo resuelto...estoy leendo bastante pero me complico un poco con el tiempo por mis otras labores..

Muchas Gracias
Salu2""


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: llAudioslavell en 8 Enero 2012, 20:10 pm
Espero anciosamente respuestas....  estoy leendo mas y cada vez mas tengo mas dudas  :-\  y no encuentro soluccion en Internet ....
Gracias..   :)
Salu2 !!!


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: Novlucker en 9 Enero 2012, 13:26 pm
-Con respecto a Socket sincriono:
- ¿ Que quiere decir con: Socket que se bloquean ?
- "hasta que han recibido toda la informacion" ¿ Esto se refiere que el mensaje que envio el cliente al servidor, ha llegado sin ningun problema ?
Quiere decir que tu aplicación irá ejecutando hasta que espere información, luego de lo cual se detendrá y quedará a la espera de recibir esa información.

- "En este tipo de socket, cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion.", todo esto quiere decir que el cliente o servidor se  cuelga una vez que se alla recibido el mensaje (datos) ???
Lo mismo de antes, hasta recibir todos los datos no sigue.

Con respecto a Socket asincrono:
- ¿ a que le llama buffer, que Clase en VB.NET es  y como funciona este ?
Por ejemplo un array de bytes en el cual irías almacenando la información a medida que llega.

En el primer caso, la aplicación se bloquea y no sigue hasta bien reciba toda la información. En el segundo caso, la aplicación sigue y va actuando a medida que recibe la información. Una "dice" ... "espero a recibir la información para seguir", y la otra ... "a medida que llegue la información, me vas avisando".

- y por ultimo.... normalmente cual de estos metodos es mas usado en la actualidad y por que... hay alguna ventaja ???
Depende de lo que estés buscando en tu aplicación, en algunos casos se hará uso de sockets sincrónicos, en otros asincrónicos, y en otros incluso sincrónicos y threads :P

Saludos


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: llAudioslavell en 9 Enero 2012, 17:18 pm
Quiere decir que tu aplicación irá ejecutando hasta que espere información, luego de lo cual se detendrá y quedará a la espera de recibir esa información.
Lo mismo de antes, hasta recibir todos los datos no sigue.
Por ejemplo un array de bytes en el cual irías almacenando la información a medida que llega.

En el primer caso, la aplicación se bloquea y no sigue hasta bien reciba toda la información. En el segundo caso, la aplicación sigue y va actuando a medida que recibe la información. Una "dice" ... "espero a recibir la información para seguir", y la otra ... "a medida que llegue la información, me vas avisando".
Depende de lo que estés buscando en tu aplicación, en algunos casos se hará uso de sockets sincrónicos, en otros asincrónicos, y en otros incluso sincrónicos y threads :P

Saludos


Exelente aclaracion..... ahora comprendo mejor las cosas... pero me quede en duda sobre tu ultima explicacion......... cuales son esos casos especificos ??? disculpa por tantas preguntas..  nuevamente aclaro que soy Novato ^^


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: CATBro en 10 Enero 2012, 00:24 am
Se puede decir que los sockets asincronos, permiten que los metodos que usen tus sockets, funcionen por asi decirlo con "hilos integrados", actuan como sockets y hilos al mismo tiempo por asi explicarlos, los asincronos evitan que uses hilos en tus sockets.

Casos:
CASO#1:
Usando sockets sincronos sin hilos.
Por ejemplo: Alguien te da una lista de tareas por hacer, jejje bueno..
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Usando sockets sincronos sin hilos , primero tendrias que caminar 10kilometros y ya recorrido los 10 kilometros, recien empezar a respirar, mientras no cumplas por asi decirlo el primer metodo, o tarea, no puedes respirar

CASO#2
Usando sockets sincronos con hilos
Ejmplo:Alguien te una lista de tareas igual a la de arriba
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Podrias poner la tarea de respirar en un hilo, y al mismo tiempo en que cumples con la tarea de caminar los 10 kilometros puedes respirar

CASO#3
Usando sockets asincronos
Ejemplo: La mima lista de arriba de cosas por hacer

Puedes hacer todo al mismo tiempo

No se si me di a entender

Otro ejemplo pero en un servidor
El servidor de tu chat,recive informacion en cualquier momento, pero no sabes en que momento puede llegarle el mensaje, pero mientras espera esa informacion, talvez quieres que haga otra cosa, puede que al servidor de tu chat quieras que tambien de hay tu puedas tecelar un mensaje y mandarlo a otro usuario.
Por lo tanto tienes dos opciones usar sockets sincronos e hilos, o sockets asincronos.

No se si me di a entender
Saludos



Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: llAudioslavell en 21 Enero 2012, 16:48 pm
Se puede decir que los sockets asincronos, permiten que los metodos que usen tus sockets, funcionen por asi decirlo con "hilos integrados", actuan como sockets y hilos al mismo tiempo por asi explicarlos, los asincronos evitan que uses hilos en tus sockets.

Casos:
CASO#1:
Usando sockets sincronos sin hilos.
Por ejemplo: Alguien te da una lista de tareas por hacer, jejje bueno..
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Usando sockets sincronos sin hilos , primero tendrias que caminar 10kilometros y ya recorrido los 10 kilometros, recien empezar a respirar, mientras no cumplas por asi decirlo el primer metodo, o tarea, no puedes respirar

CASO#2
Usando sockets sincronos con hilos
Ejmplo:Alguien te una lista de tareas igual a la de arriba
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Podrias poner la tarea de respirar en un hilo, y al mismo tiempo en que cumples con la tarea de caminar los 10 kilometros puedes respirar

CASO#3
Usando sockets asincronos
Ejemplo: La mima lista de arriba de cosas por hacer

Puedes hacer todo al mismo tiempo

No se si me di a entender

Otro ejemplo pero en un servidor
El servidor de tu chat,recive informacion en cualquier momento, pero no sabes en que momento puede llegarle el mensaje, pero mientras espera esa informacion, talvez quieres que haga otra cosa, puede que al servidor de tu chat quieras que tambien de hay tu puedas tecelar un mensaje y mandarlo a otro usuario.
Por lo tanto tienes dos opciones usar sockets sincronos e hilos, o sockets asincronos.

No se si me di a entender
Saludos



Exelente amigo .. disculpame por no darte las gracias antes,.. es que no pude ya conectarme por falta de tiempo bueno exelente hermano !!!!!

Entonces los socket asincrono me dejan recibir informacion(mensaje) de cualquier cliente en cualquier  momento  ....   pero una duda, que Clases en .NET se utiliza para este caso.. y que clases se utiliza con el metodo de socket sincrono

Espero respuestas hermanos ^^


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: TomaSs en 14 Enero 2013, 07:04 am
Aprovecho este hilo para hacer una pregunta sobre el tema.
Para un chat, el cual recibirá información en cualquier momento, qué sería más eficiente? el método sincrono con hilos o el método asincrono?

gracias!


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: kub0x en 14 Enero 2013, 17:10 pm
que Clases en .NET se utiliza para este caso.. y que clases se utiliza con el metodo de socket sincrono

TcpClient para la implementación cliente y TcpServer para la parte del servidor. Estas dos clases son muy fáciles de emplear, aunque yo prefiero utilizar la Clase Sockets, pues TcpClient/Server están basadas en la última.

Aprovecho este hilo para hacer una pregunta sobre el tema.
Para un chat, el cual recibirá información en cualquier momento, qué sería más eficiente? el método sincrono con hilos o el método asincrono?
gracias!

En mi opinión usaría sockets asíncronos, pues en un Chat te interesa enviar mensajes mientras los recibes, es decir, multi-tarea (enviar/recibir). Si lo implementaras bajo Sockets sincronos pues estarías esperando la llegada de información (paquetes) del otro extremo y bloquearías el proceso hasta que recibieras los datos. Todo depende del uso o implementación que quieras dar.

Saludos!


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: TomaSs en 14 Enero 2013, 17:51 pm
En mi opinión usaría sockets asíncronos, pues en un Chat te interesa enviar mensajes mientras los recibes, es decir, multi-tarea (enviar/recibir). Si lo implementaras bajo Sockets sincronos pues estarías esperando la llegada de información (paquetes) del otro extremo y bloquearías el proceso hasta que recibieras los datos. Todo depende del uso o implementación que quieras dar.

Saludos!

Pero por lo que yo he podido comprobar, con varios hilos también te permite estar recibiendo en un hilo, y enviar en otro hilo, no es así?


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: kub0x en 14 Enero 2013, 19:09 pm
Exacto. Podrías correr en un hilo el proceso de recibo de mensajes, de esta forma no bloquearía el hilo principal. El proceso de envio de mensaje los podrías implementar perfectamente en el hilo principal de la aplicación. Los métodos asíncronos utilizan funciones CallBack (de llamada) que  permiten continuar con la ejecucción del código mientras se ejecutan las instrucciones de dichas funciones de llamada.

Saludos!


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: TomaSs en 14 Enero 2013, 19:40 pm
Claro, si a fin de cuentas, el modo sincrono por hilos y el modo asíncrono lo utilizaría para lo mismo, para mantener el socket escuchando y mientras poder enviar también a través de el y utilizar el programa para otras cosas, pero lo que quería saber es cual de los dos métodos es más eficiente, cual consume menos recursos.
O el método asíncrono también crea por detrás hilos? y al final es lo mismo en cuanto a eficiencia?


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: kub0x en 14 Enero 2013, 20:49 pm
Si necesitas que el servidor sea multi hilo te recomiendo que utilices sockets asincronos pues no tendrias que aislar los distintos métodos en hilos.


Título: Re: Duda con Sockets sincrono y asincrono ..
Publicado por: spiritdead en 14 Enero 2013, 21:49 pm
Si necesitas que el servidor sea multi hilo te recomiendo que utilices sockets asincronos pues no tendrias que aislar los distintos métodos en hilos.

xD tantas cosas q se pueden hacer con los sockets ;) verdad :D