Sockets

Monica
18 de Julio del 2005
Hola, necesito comunicar una aplicación hecha en java con otra hecha en visual basic. Intento comunicarlos mediante sockets, pero cuando ejecuto la hecha en visual basic, me dice que la dirección ya está en uso...

¿alguna idea?
Gracias.

chuidiang
18 de Julio del 2005
Hola:

El problema de la direccion en uso es el siguiente.

Cuando abres un socket puedes hacerlo como cliente o como servidor. Servidor es el que hace accept() (acepta llamadas, no sé como se llama la función en visual basic). El servidor atiende a un "puerto", que es un número entre 1 y 65535. Cada servidor que arranques en un ordenador debe atender a un puerto distinto. Los puertos de 1 a 1023 están reservador para el sistema operativo y servicios comunes (correo, internet, etc). No deberías usarlos.

Si abres un servidor atendiendo un numero de puerto al que ya hay otro servidor atendiendo, te saldrá el error que comentas.

También es posible que si lanzas el servidor la primera vez y lo matas (o termina su ejecución) sin avisar al sistema operativo de que ya no está atendiendo a ese puerto, el sistema siga pensando que ese puerto esta ocupado. Al lanzar el servidor por segunda vez, obtendrás el mismo error, aunque nadie esté atendiendo a ese puerto.


Si este es tu problema (te funciona la primera vez, pero después al rearrancar no), en C y en java hay una opcion para el socket servidor que es REUSEADDRESS. Se pone llamando a una funcion setsockopt(). Con esto se puede recuperar el puerto si has matado al servidor la primera vez de mala manera.

No sé si tu problema es este, pero si no lo es, puedes detallar un poco más.

Otro tema que no sé si controlas. El formato de enteros de java y de visual basic es distinto. Echa un ojo a este pequeño tutorial: http://www.geocities.com/chuidiang/java/sockets/cpp_java/cpp_java.html
Es entre java y C, pero tendrás los mismos problemas con java y visual basic.

Se buena.