LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   java socket saving a file from a client (https://www.linuxquestions.org/questions/programming-9/java-socket-saving-a-file-from-a-client-947889/)

isamuede 05-31-2012 11:26 PM

java socket saving a file from a client
 
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


All times are GMT -5. The time now is 01:29 AM.