el codigo ya existente
Aqui esta el server [corre,escucha, acepta conexiones y envia mensajitos]
Código:
aqui ta la clase que apoya a serverpackage servidor; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Servidor implements Runnable{ private static final Logger Logger = LoggerFactory.getLogger(Servidor.class); private ServerSocket server; private List atendentes; private boolean inicializado; private boolean ejecutando; private Thread thread; public Servidor(int porta) throws Exception { atendentes = new ArrayList(); inicializado = false; ejecutando = false; open(porta); } private void open(int porta) throws Exception{ Logger.info("Petición de conexión"); server = new ServerSocket(porta); inicializado = true; } private void close(){ Logger.info("Cierre de conexión"); for (Atendente atendente : atendentes){ try{ atendente.stop(); } catch(Exception e){ System.out.println(e); } } try { server.close(); } catch(Exception e){ System.out.println(e); } server = null; inicializado = false; ejecutando = false; thread = null; } public void start(){ Logger.info("Servidor up and running"); if (!inicializado || ejecutando) { return; } ejecutando = true; thread = new Thread(this); thread.start(); } public void stop() throws Exception { Logger.info("Cierre de server y threads"); ejecutando = false; thread.join(); } public void run(){ System.out.println("Esperando conexiones."); while (ejecutando){ try { server.setSoTimeout(2500); Socket socket = server.accept(); System.out.println("Conexión establecida."); Atendente atendente = new Atendente(socket); atendente.start(); atendentes.add(atendente); } catch (SocketTimeoutException e) { } catch (Exception e) { System.out.println(e); break; } } close(); } public static void main(String[] args) throws Exception { Logger.info("Inicio de servidor"); System.out.println("Iniciando server."); Servidor servidor = new Servidor(2525); servidor.start(); System.out.println("Presione Enter para cerrar el server"); new Scanner(System.in).nextLine(); System.out.println("Cerrando servidor"); servidor.stop(); Logger.info("Fin de servidor =p" ); } }
Código:
aqui el clientepackage servidor; import java.net.Socket; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.SocketTimeoutException; public class Atendente implements Runnable { private Socket socket; private BufferedReader in; private PrintStream out; private boolean inicializado; private boolean ejecutando; private Thread thread; public Atendente(Socket socket) throws Exception { this.socket = socket; this.inicializado = false; this.ejecutando = false; open(); } private void open() throws Exception { try{ in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintStream(socket.getOutputStream()); inicializado = true; } catch(Exception e){ close(); throw e; } } private void close() { if (in != null){ try{ in.close(); } catch (Exception e){ System.out.println(e); } } if (out != null){ try{ out.close(); } catch (Exception e){ System.out.println(e); } } try{ socket.close(); } catch (Exception e){ System.out.println(e); } in= null; out = null; socket= null; inicializado = false; ejecutando = false; thread = null; } public void start(){ if(!inicializado || ejecutando){ return; } ejecutando = true; thread = new Thread(this); thread.start(); } public void stop() throws Exception{ ejecutando = false; thread.join(); } public void run(){ while (ejecutando){ try { socket.setSoTimeout(2500); String mensaje = in.readLine(); System.out.println("Mensaje recibido de los clientes [" + socket.getInetAddress().getHostName() + ":"+ socket.getPort()+ "]:"+ mensaje); if ("Fin".equals(mensaje)) { break; } out.println(mensaje); } catch (SocketTimeoutException e){ } catch (Exception e){ System.out.println(e); break; } } System.out.println("Cerrando conexión"); close(); } }
Código:
entonces que? que no se como meter este codigito ni en donde (server o cliente)package cliente; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.net.SocketTimeoutException; import java.util.Scanner; public class Cliente implements Runnable{ private Socket socket; private BufferedReader in; private PrintStream out; private boolean inicializado; private boolean ejecutando; private Thread thread; public Cliente(String endereco, int porta) throws Exception { inicializado = false; ejecutando = false; open(endereco,porta); } private void open(String endereco, int porta) throws Exception { try { socket = new Socket(endereco,porta); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out= new PrintStream(socket.getOutputStream()); inicializado = true; } catch (Exception e){ System.out.println(e); close(); throw e; } } private void close(){ if (in != null){ try { in.close(); } catch (Exception e){ System.out.println(e); } } if (out != null){ try { out.close(); } catch (Exception e){ System.out.println(e); } } if (socket != null){ try { socket.close(); } catch (Exception e){ System.out.println(e); } } in = null; out = null; socket = null; inicializado = false; ejecutando = false; thread = null; } public void start(){ if(!inicializado || ejecutando){ return; } ejecutando = true; thread = new Thread(this); thread.start(); } public void stop() throws Exception { ejecutando = false; if (thread != null) { thread.join(); } } public boolean isEjecutando(){ return ejecutando; } public void send(String mensaje){ out.println(mensaje); } public void run(){ while (ejecutando){ try { socket.setSoTimeout(2500); String mensaje = in.readLine(); if (mensaje == null){ break; } System.out.println( "Mensaje enviado por el servidor: " + mensaje); } catch (SocketTimeoutException e){ } catch (Exception e){ System.out.println(e); break; } } close(); } public static void main (String[] args) throws Exception { System.out.println("Iniciando cliente..."); System.out.println("Iniciando conexión..."); Cliente cliente = new Cliente("localhost",2525); System.out.println("Conexión establecida"); cliente.start(); Scanner scanner = new Scanner(System.in); while(true) { System.out.print("Escriba su mensaje:"); String mensaje = scanner.nextLine(); if(!cliente.isEjecutando()){ break; } cliente.send(mensaje); if ("Fin".equals(mensaje)){ break; } } System.out.println("Cerrando cliente"); cliente.stop(); } }
Código:
este contador se supone que ademas de contar escribe un archivo al serverimport java.io.*; import java.util.*; public class CuentaPalabras { public static void main(String[] args) throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in), 1); String line; StringTokenizer palabras; int contador = 0; // Aquí se procesan las palabras hasta que se llega al fin Ctrl+z en guindows pero en unixes es Ctrl+d . Creo=) while ((line = stdin.readLine()) != null) { // Aquí se cuentan las palabras. palabras = new StringTokenizer(line); while (palabras.hasMoreTokens()) { palabras.nextToken(); contador++; } } System.out.println("\n" + contador + " palabras leidas"); } }
gracias por sus comentarios =)