Duda sobre Sockets y Threads

cynic
24 de Noviembre del 2005
Hola, estaba intentando hacer un chat, pero me da un error, bueno muchos, me dice ioexception handled o algo asi... si alguien me puede ayudar, aqui os dejo el código... es para una practica en la universidad, pero yo no soy capaz de ver el error y el profesor no ayuda. :( (y yo la verda de java poco...)
import java.io.*;
import java.net.*;

public class chat
{
public static void main(String argv[]) throws Exception
{
class Escribo extends Thread
{
public void run()
{
String frase;
BufferedReader entradaDesdeUsuario = new BufferedReader(new InputStreamReader(System.in));
//Crea una clase para leer desde teclado
Socket socketCliente = new Socket("localhost",6789);
//Crea una clase puerto para enviar y escuchar
DataOutputStream salidaAServidor = new DataOutputStream(socketCliente.getOutputStream());
//Crea una clase forma de mandar la movie
BufferedReader entradaDesdeServidor = new BufferedReader(new InputStreamReader(
socketCliente.getInputStream()));
//Crea la clase que escucha
frase = entradaDesdeUsuario.readLine();
//leemos frase desde teclado con metodo readline
salidaAServidor.writeBytes(frase + 'n');
//la enviamos con metodo writeBytes
}
}
class Muestro extends Thread
{
public void run()
{
String frase;
ServerSocket socketAcogida = new ServerSocket(6789);
//Crea clase de escucha en el puerto
while(true)
{
Socket socketConexion = socketAcogida.accept();
BufferedReader entradaDesdeCliente = new BufferedReader(new InputStreamReader(
socketConexion.getInputStream()));
//Crea la clase para leer la frase de la conexion aceptada
frase = entradaDesdeCliente.readLine();
//Lee la frase con el metodo readline
System.out.println(frase);

}

}
}

Escribo cliente1 = new Escribo();
Muestro servidor1 = new Muestro();
//Definimos los objetos cliente1 y servidor1 de las clases
servidor1.start();
cliente1.start();
//los iniciamos con el metodo start

}
}


chuidiang
24 de Noviembre del 2005
Hola:

Cualquier operación de entrada/salida de información, como pueden ser los read y write en un socket, pueden dar una IOException, es decir, un error al intentar leer o escribir.
Tu codigo debe obligatoriamente capturar esa excepcion o relanzarla, si no, no compila.
Para ello debes meter los write, read e incluso los new si te los pide en bloques try-catch

try
{
...
salidaAServidor.writeBytes(frase + 'n');
...
}
catch (IOException e)
{
System.out.err("No se puede escribir "+e.toString());
}

Se bueno.