Sockets,threads//Para expertos

Socket
07 de Abril del 2005
Bueno sigo igual XDD
Se me keda enganxado en cuanto llamo al constructor de la classe ServerEcho,ke arranca el start ,luego deberia entrar en la funcion run pero hay salta;



CLASSE CLIENTE
-----------------------------------
package sockets;
import java.net.*;
import java.io.*;

public class Client {

final static int port=1000;

public static void main(String[] args) {

String frase="";
try{
Socket skclient = new Socket("localhost",port);
//Crrem un canal de comunicacio entre el teclat i l'usuari

BufferedReader fluxe= new BufferedReader(new InputStreamReader(System.in));

while(frase != "End Echo"){
frase = fluxe.readLine();

// Conseguimos el canal de salida

// Con la clase InputStreamReader, se pueden convertir streams de bytes a streams de caracteres. Se utiliza la clase OutputStreamWriter para traducir streams de caracteres a streams de bytes.
PrintWriter salida = new PrintWriter( new OutputStreamWriter(skclient.getOutputStream() ),true );

// Enviamos una línea de texto al servidor
salida.println(frase);
// Recogemos la línea devuelta por el servidor y la
// presentamos en pantalla
BufferedReader entrada = new BufferedReader( new InputStreamReader(skclient.getInputStream() ) );
System.out.println(entrada.readLine() );

}
// Cerramos el socket

skclient.close();
}catch( IOException e ) {
System.out.println( e );
}

}

}

-------------------------------------------------


CLASSE SERVER
-----------------------------------
package sockets;

/**
*
* @author pepe
*/
public class Server {

/** Creates a new instance of Server */
public Server() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ServerEcho se=new ServerEcho();
}

}
----------------------------------------


CLASSE SERVERECHO
----------------------------------------
package sockets;

import java.io.*;
import java.net.*;
import java.util.*;
/**
*
* @author Ctesias
*/
public class ServerEcho extends Thread {

static final int port=1000;
Socket skClient;
ServerSocket skServer;
String frase = "";

int num_usuaris=0;

/** Creates a new instance of ServerEcho */
public ServerEcho() {

start();
}




public void run(){


try{


while(num_usuaris < 10){
skServer = new ServerSocket(port);
System.out.println("Escolto pel port " + port);
Socket skClient = skServer.accept(); //Creem el objecte
System.out.println("Clients num " + num_usuaris);
num_usuaris++;
escolto();





}

}catch( Exception e ) {
System.out.println( e.getMessage() );}








}


public void escolto(){
try{

BufferedReader entrada = new BufferedReader( new InputStreamReader(skClient.getInputStream() ) );

PrintWriter salida = new PrintWriter( new OutputStreamWriter(skClient.getOutputStream() ),true );

// Enviamos una línea de texto al servidor
while(true){
frase = entrada.readLine();
System.out.println(frase);
salida.println(frase);



}



}catch( IOException e ) {
e.printStackTrace();
}


}
}


----------------------------------

EN teoria el servidor deberia devolverme los strings que le envia los clientes.

Este es el resultado del serverecho

Escolto pel port 1000
Clients num 0
null


Estos del cliente

le envio el string pepe pero no me lo devuelve

pepe
java.net.SocketException: Connection reset

nicokiki
07 de Abril del 2005
Hola!!!!!!!!!

1º -> while(frase != "End Echo"){
ESTA mal. Estas comparando por referencia dos Strings. Mal. Busca por el lado de equals() ó equalsIgnoreCase()

2º -> Cuando envies por sockets hace un flush()

Salu2!!!!!!!!

Socket
07 de Abril del 2005
Gracias x lo del equals fallo mio.