problemas con comunicaciones tcp

alfonbear
17 de Marzo del 2006
Muy buenas a todos.

Ante todo decir que soy un toyo con esto de la programación, pero que lo estoy intentado. Agradecería si alguien puede ayudarme. Estoy intentando desarrollar una aplicación que debe conectarse con otra mediante tcp. He tomado un código de esta página para comenzar a ver si puedo lanzar dos procesos, uno cliente y otro servidor. El problema es que me sale una java.net.ConnectionException. He revisado los puertos (1234) pero no sé por qué no puedo hacerlo. La conexión que intento hacer es local, es decir, correr ambos procesos en mi ordenador. Aquí pongo el código:

import java.io.*;
import java.net.*;

class cliente {

public static void main(String args[]){
// Leemos el primer parámetro, donde debe ir la dirección
// IP del servidor
System.out.println("Comienza la ejecución del cliente");
InetAddress direcc = null;

try{
System.out.println("Intenta encontrar el servidor");
//direcc = InetAddress.getByName("192.168.0.35");
//direcc = InetAddress.getByName(args[0]);
direcc = InetAddress.getLocalHost();
if (direcc != null) {
System.out.println("Host encontrado: " + direcc);
} else{
System.out.println("Host no encontrado: " + direcc);
}
} catch(UnknownHostException uhe){
System.out.println("Host no encontrado : " + uhe);
System.exit(-1);
}

// Puerto que hemos usado para el servidor
int puerto = 1234;

// Para cada uno de los argumentos...
for (int n=1;n<args.length;n++){
Socket sckt = null;
DataInputStream dis = null;
DataOutputStream dos = null;
try{
// Convertimos el texto en número
int numero = Integer.parseInt(args[n]);
System.out.println("Argumento " + n + ": "+ numero);

// Creamos el Socket
System.out.println("Creando el socket de cliente...");
sckt = new Socket(direcc,puerto);
System.out.println("Socket de cliente creado en el puerto: " + sckt.getLocalPort());
System.out.println("Socket conectado ?: " + sckt.isBound());
// Extraemos los streams de entrada y salida
dis = new DataInputStream(sckt.getInputStream());
dos = new DataOutputStream(sckt.getOutputStream());

// Lo escribimos
System.out.println("Intentando enviar: " + numero);
System.out.println("Enviando dato de entrada");
dos.writeInt(numero);

// Leemos el resultado final
System.out.println("Intentando recibir respuesta...");
long resultado = dis.readLong();

// Indicamos en pantalla
System.out.println( "Solicitud = " + numero +
"tResultado = " +resultado );

// y cerramos los streams y el socket
dis.close();
dos.close();
} catch(Exception e){
System.err.println("Se ha producido la excepción : " +e);
}

try{
if (sckt!=null) sckt.close();
} catch(IOException ioe){
System.err.println("Error al cerrar el socket : " + ioe);
}
}
}
}


Y este es el código del servidor:
import java.io.*;
import java.net.*;

class servidor{

public static void main(String args[]){

// Primero indicamos la dirección IP local
try{
System.out.println("LocalHost = " + InetAddress.getLocalHost().toString());
} catch (UnknownHostException uhe){
System.err.println("No puedo saber la dirección IP local : " + uhe);
}


// Abrimos un "Socket de Servidor" TCP en el puerto 1234.
ServerSocket ss = null;
try{
ss = new ServerSocket(1234);
System.out.println("Socket servidor abierto en el puerto: " + ss.getLocalPort());
} catch (IOException ioe){
System.err.println("Error al abrir el socket de servidor : " + ioe);
System.exit(-1);
}


int entrada;
long salida;
// Bucle infinito
while(true){
try{
// Esperamos a que alguien se conecte a nuestro Socket
System.out.println("Esperando conexiones de clientes...");
Socket sckt = ss.accept();
System.out.println("Conexión establecida");

// Extraemos los Streams de entrada y de salida
DataInputStream dis = new DataInputStream(sckt.getInputStream());

DataOutputStream dos = new DataOutputStream(sckt.getOutputStream());

// Podemos extraer información del socket
// Nº de puerto remoto
int puerto = sckt.getPort();

// Dirección de Internet remota
InetAddress direcc = sckt.getInetAddress();

// Leemos datos de la peticion

entrada = dis.readInt();
// Calculamos resultado

salida = (long)entrada*(long)entrada;

// Escribimos el resultado

dos.writeLong(salida);
// Cerramos los streams
dis.close();
dos.close();

sckt.close();

// Registramos en salida estandard
System.out.println( "Cliente = " + direcc + ":" + puerto +
"tEntrada = " + entrada +
"tSalida = " + salida );
} catch(Exception e){
System.err.println("Se ha producido la excepción : " +e);
}
}
}
}

Espero que alguien me ayude, por favorrrrrrr.

Un saludo.