LinuxQuestions.org
Visit Jeremy's Blog.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 06-01-2012, 12:26 AM   #1
isamuede
Member
 
Registered: Jun 2008
Posts: 57

Rep: Reputation: 16
Thumbs up 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
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
[SOLVED] How to connect a java client to a BSD server using socket programming sanju.lnt Programming 2 08-06-2011 03:57 PM
Custom POP3 client that allows saving file to CSV j.smith1981 General 4 02-11-2011 04:00 AM
Saving a text file as a variable and reading it every second in java script mrobertson Programming 4 03-26-2007 09:25 PM
Saving objects to file in java linuxmandrake Programming 2 04-10-2006 07:54 PM
Java and saving an HTML file markdw Programming 2 03-18-2002 04:15 AM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 02:09 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration