#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    May 2012
    Posts
    1
    Rep Power
    0

    Thumbs up Socket saving file


    yo there! Im working in a server based on sockets , in fact I already have the code but im lost , because I dont know how to embeds a small code and how to modify the code
    Heres the server code [runs, listen , accept connections, and relays messages]
    Code:
    package 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<Atendente> atendentes;
    
    	private boolean inicializado;
    	private boolean ejecutando;
    	private Thread thread;
    
    	public Servidor(int porta) throws Exception {
    		atendentes = new ArrayList<Atendente>();
    		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" );
    	}
    }
    heres the class that supports the server
    Code:
    package 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();
    
    	}
    
    }
    and heres the client
    Code:
    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();
    	}
    }
    then what?? I have no clue how to be embeding this litle counter,(I dont know even where if in the server or the client)
    Code:
    import 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");
    		}
    	}
    this counter its supposed to count how many words are writen and then write a file back in the server/

    Thanks for any comment
  2. #2
  3. Contributing User
    Devshed Expert (3500 - 3999 posts)

    Join Date
    Aug 2010
    Location
    Eastern Florida
    Posts
    3,711
    Rep Power
    347
    Can you explain what the current program does, show its output and explain what is wrong with the output and show what you want the output to be.
  4. #3
  5. Contributing User
    Devshed Expert (3500 - 3999 posts)

    Join Date
    Aug 2010
    Location
    Eastern Florida
    Posts
    3,711
    Rep Power
    347
    Cross posted at http://www.java-forums.org/networking/60344-socket-server-moded.html

IMN logo majestic logo threadwatch logo seochat tools logo