Dudas programacion sockets Java

Iniciado por thurgrim, 16 Mayo 2009, 19:04 PM

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

thurgrim

Hola a todos.
Actualmenete tengo que hacer varios programas cliente-servidor en java usando un servicio orientado a conexión (TCP).
Ya entiendo como funcionan las clases sokect y serverSocket, pero me quedan aún algunas dudas relativas a lo que puede ocurrir cuando hay algún problema en la conexión o cuando el cliente-servidor no se entendieron y alguno cierra la conexión:

*Si uno de los dos extremos de la conexión cierra esta misma, usando el método close(), cuando llamas a read() que yo sepa se leen los últimos bytes que se hayan enviado, y cuando se acaben se lee un -1 (en sucesivos intentos también se lee -1). En cambio si se intenta escribir debería saltar una excepción (SocketException).

*Si la conexión se ha roto por algún motivo (desconectamos el cable de red), creo que tanto tratando de leer como de escribir por el socket, debería de generarse una excepción (SocketException).

Mi problema es que parece que no siempre pasa así, no se si es que lo entiendo mal o es por algún otro motivo.

Amerikano|Cls

No le veo problema, se genera una excepcion  ;) que mas quieres saber?




Mi blog:
http://amerikanocls.blogspot.com

thurgrim

Pues el problema es que no siempre pasa así.
Actualmente estoy haciendo el servidor de un chat, en el que se puden conectar clientes y enviar mensajes a todo el mundo a través del servidor.
Pues bien, lo que ocurre es que si ejecuto el programa cliente y desconecto su cable de red, cuando algún otro cliente escribe un mensaje, el servidor lo envia al cliente desconectado (al igual que a los demás) y no salta excepción.

Amerikano|Cls

Puede ser por la siguiente razon y es que el canal por el que envia los datos el servidor es distinto al canal por donde escucha el cliente, es por esto que el buffer puede quedar con los datos enviados asi no sean recibidos del todo (es simple idea  ;)), por esta razon no te votaria excepcion.

salu2




Mi blog:
http://amerikanocls.blogspot.com

thurgrim

No entiendo que quieres decir con eso del canal. Si te refieres al puerto, debería dar igual que en el que escucha el servidor y por el que recibe el cliente no sean el mismo, no?