Artículo
|
Sockets en Windows Phone 7.5 - No es oro todo lo que reluce |
Con la actualización Mango, por fin, han llegado los sockets a Windows Phone 7.5. En esta serie de artículos hablaremos sobre la implementación realizada en Windows Phone, y veremos en un proyecto completo, como usarlos.
Este primer artículo lo empezamos con un poco de teoría básica (que os podéis saltar los “expertos”), siguiendo con la explicación de cómo se han implementado los sockets en Windows Phone 7.5.
1.¿Qué es un socket?
Un Socket es un mecanismo que nos permite comunicarnos con otro socket, normalmente ubicado en otro dispositivo. Cada socket viene determinado, básicamente, por dos direcciones IP, una local (la de nuestro dispositivo) y otra remota (la del dispositivo con el que nos queremos comunicar), un puerto local y otro remoto, y un protocolo de transporte, normalmente TCP o UPD.
a) Puertos
La dirección IP nos viene definida por la tarjeta de red, mientras que los puertos los podemos elegir nosotros. En el caso de los puertos, se numeran de 0 a 65535, pero hay que tener en cuenta que muchos de ellos están reservados para diferentes usos, como las páginas web, el correo electrónico, FTP, etc…, la lista completa se puede consultar en la página web de IANA (http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml) (Internet Assigned Numbers Authority), que es la organización que, entre otras funciones, se encarga de asignar los puertos IP.
Hay que tener en cuenta que no podemos utilizar un puerto que ya esté utilizando otra aplicación. Básicamente, se recomienda utilizar puertos por encima de 1024, siempre que ya no estén en uso. Una buena práctica consiste en informar al usuario del puerto o puertos que utiliza nuestra aplicación, y permitir modificarlos, con el fin de poder configurar otros programas, Firewalls y Routers.
b) Protocolos TCP y UDP
El protocolo más utilizado es el TCP (Transmission Control Protocol). Este protocolo garantiza que los datos son recibidos por el destinatario de forma correcta, tanto en lo que se refiere a la integridad de los datos, como en tiempo (orden en el que se han enviado). Por ello, se orienta a la conexión, es decir, debe existir una conexión permanente y constante entre los dos extremos.
Alternativamente, podemos utilizar el protocolo UDP (User Datagram Protocol), mucho más liberal en cuanto a la conexión, ya que no requiere que esta sea permanente. Pero lo único que garantiza es que si un mensaje llega a su destino, llega integro, pero no garantiza el orden de llegada, ni que este llegue a su destino.
2. Implementación de sockets en Windows Phone 7.5
No es oro todo lo que reluce: La implementación de sockets que se ha realizado en Windows Phone 7.5 es parcial, ya que solo se ha hecho en modo cliente, lo que significa que el teléfono debe ser el que inicia la comunicación, y solo es capaz de recibir respuestas a esa comunicación, por lo que no puede aceptar nuevas conexiones, solo iniciarlas.
El principal problema es que no podemos especificar qué puerto local queremos utilizar, ya que este puerto lo gestiona el sistema operativo, y no tenemos posibilidad de configurarlo. Esto nos condiciona mucho a la hora de usar sockets en nuestras aplicaciones.
En el siguiente diagrama se muestra un ejemplo de procedimiento de conexión hacia un servidor situado en el puerto 1234:
Este primer artículo lo empezamos con un poco de teoría básica (que os podéis saltar los “expertos”), siguiendo con la explicación de cómo se han implementado los sockets en Windows Phone 7.5.
1.¿Qué es un socket?
Un Socket es un mecanismo que nos permite comunicarnos con otro socket, normalmente ubicado en otro dispositivo. Cada socket viene determinado, básicamente, por dos direcciones IP, una local (la de nuestro dispositivo) y otra remota (la del dispositivo con el que nos queremos comunicar), un puerto local y otro remoto, y un protocolo de transporte, normalmente TCP o UPD.
a) Puertos
La dirección IP nos viene definida por la tarjeta de red, mientras que los puertos los podemos elegir nosotros. En el caso de los puertos, se numeran de 0 a 65535, pero hay que tener en cuenta que muchos de ellos están reservados para diferentes usos, como las páginas web, el correo electrónico, FTP, etc…, la lista completa se puede consultar en la página web de IANA (http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml) (Internet Assigned Numbers Authority), que es la organización que, entre otras funciones, se encarga de asignar los puertos IP.
Hay que tener en cuenta que no podemos utilizar un puerto que ya esté utilizando otra aplicación. Básicamente, se recomienda utilizar puertos por encima de 1024, siempre que ya no estén en uso. Una buena práctica consiste en informar al usuario del puerto o puertos que utiliza nuestra aplicación, y permitir modificarlos, con el fin de poder configurar otros programas, Firewalls y Routers.
b) Protocolos TCP y UDP
El protocolo más utilizado es el TCP (Transmission Control Protocol). Este protocolo garantiza que los datos son recibidos por el destinatario de forma correcta, tanto en lo que se refiere a la integridad de los datos, como en tiempo (orden en el que se han enviado). Por ello, se orienta a la conexión, es decir, debe existir una conexión permanente y constante entre los dos extremos.
Alternativamente, podemos utilizar el protocolo UDP (User Datagram Protocol), mucho más liberal en cuanto a la conexión, ya que no requiere que esta sea permanente. Pero lo único que garantiza es que si un mensaje llega a su destino, llega integro, pero no garantiza el orden de llegada, ni que este llegue a su destino.
2. Implementación de sockets en Windows Phone 7.5
No es oro todo lo que reluce: La implementación de sockets que se ha realizado en Windows Phone 7.5 es parcial, ya que solo se ha hecho en modo cliente, lo que significa que el teléfono debe ser el que inicia la comunicación, y solo es capaz de recibir respuestas a esa comunicación, por lo que no puede aceptar nuevas conexiones, solo iniciarlas.
El principal problema es que no podemos especificar qué puerto local queremos utilizar, ya que este puerto lo gestiona el sistema operativo, y no tenemos posibilidad de configurarlo. Esto nos condiciona mucho a la hora de usar sockets en nuestras aplicaciones.
En el siguiente diagrama se muestra un ejemplo de procedimiento de conexión hacia un servidor situado en el puerto 1234:

1. El servidor inicia la escucha en el puerto 1234.
2. Windows Phone abre un puerto con destino al puerto 1234. El puerto de origen del Windows Phone es aleatorio, o cogido de un pool que no controlamos, en este caso el 45362.
3. El proceso de inicio de la comunicación, debe incluir el envío de algún paquete, aunque este vacío, hacia el servidor.
4. El servidor responde a esa comunicación, desde el puerto 1234 hacia el puerto 45362 del cliente.
5. A partir de este momento la comunicación funciona en cualquiera de los dos sentidos.
3. ¿Qué supone esta limitación?
Esta limitación en la implementación de los sockets, implica que no se puede realizar una conexión directa entre dos Windows Phone, tendremos que utilizar un Servidor a modo de proxy, tal como muestra la imagen siguiente:

1. El servidor inicia la escucha en el puerto 1234 (debe admitir múltiples conexiones).
2. Los Windows Phone abren un puerto con destino 1234 y envían un paquete de saludo.
3. El servidor establece la conexión con los Windows Phones.
4. El primer Windows Phone envía el texto “ABC” al servidor.
5. El servidor recibe el texto y lo reenvía al segundo Windows Phone.
6. El segundo Windows Phone responde, al servidor, con el texto “DEF”.
7. El servidor recibe el texto y lo reenvía al primer Windows Phone.
4. ¿Qué necesitamos para seguir esta serie de artículos?
En esta serie de artículos, veremos un proyecto que se ejecutará sobre Windows Phone y Windows Vista o superior. Si queremos probar los ejemplos vamos a necesitar lo siguiente:
- Ordenador con Windows Vista o superior
- NetFramework 4 instalado, que se puede descargar, de forma gratuita y legal, desde aquí [http://www.microsoft.com/downloads/es-es/details.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7].
- Windows Phone SDK 7.1, que incluye el Visual Studio 2010 Express para Windows Phone, un emulador de Windows Phone 7.5 y varias herramientas y documentación. Lo podemos descargar, de forma gratuita, legal, y en castellano desde aquí [http://www.microsoft.com/downloads/es-es/details.aspx?familyid=0a373422-6680-46a7-89e1-e9a468a14259&displaylang=es]. Este SDK es compatible con Visual Studio 2010 SP1.
5. Conclusiones
Aunque la implementación de los sockets en Windows Phone 7.5 es un paso adelante, no nos permite conectarnos a otros dispositivos que no implementen sockets en modo servidor, como por ejemplo: otro Windows Phone, o el cuadricoptero AR.Drone de Parrot.
Sin embargo, añadiendo servidor intermedio podemos saltarnos esta restricción, eso sí, a costa de tener que utilizar un servidor en Internet.
En los próximos artículos de esta serie veremos cómo realizar un chat entre dos Windows Phone.
6. Referencias
- Wikipedia - Socket de Internet: http://es.wikipedia.org/wiki/Socket_de_Internet
- IANA - Service Name and Transport Protocol Port Number Registry: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml
Autor del artículo: Juan Segura – Director de I+D+i de SD Assessors, S.A – Twitter: @Duefectu
![]() |
Publicado por: Angel Carrero |
|
|
Comentarios
Últimas noticias
Últimos artículos














































