Ver Mensaje Individual
  #13 (permalink)  
Antiguo 03/04/2011, 22:56
epilefreyes
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Programa para transferir archivos de PC a PC

Esto está divertido... Vale la pena recordar el hecho que "ServerSocket" crea el socket con el que te conectarás... Pero para crear la conexión, se debe llamar el método "Accept", que crea la conexión y retorna el socket de la conexión.

Necesita algo de trabajo, pero te dejo este ejemplo si te sirve:

Código:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;


public class Main {

	private static int numSesion=0;
	
	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		try {
			serverSocket = new ServerSocket(12345);
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
		
		while (true){
			try {
				Socket nuevoSocket = serverSocket.accept();
				Escucha esc = new Escucha(nuevoSocket,numSesion++);
				esc.start();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	protected static class Escucha extends Thread{
		int numSesion;
		Socket miSocket;
		
		public Escucha(Socket miSocket,int numSesion) {
			this.miSocket = miSocket;
			this.numSesion = numSesion;
		}
		
		@Override
		public void run() {
			BufferedReader rd = null;
			try {
				rd = new BufferedReader(new InputStreamReader(miSocket.getInputStream()));
			} catch (IOException e) {
				e.printStackTrace();
			}
			while (!miSocket.isClosed()){
				String linea;
				try {
					linea = rd.readLine();
					if (linea.equals("salir")){
						miSocket.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
					break;
				}
				System.out.println(String.valueOf(numSesion) + "-" + linea);
			}
		}
	}
	
	
}
Este es un programa simple de consola: abre un puerto (12345) y se queda esperando a que alguien se conecte. Si abres una conexión con "Telnet", (utilizando "telnet localhost 12345" por lìnea de comandos) mientras este programa esté en ejecución, verás que cada vez que escribas algo y des "Enter", el porgrama java lo mostrará en consola. Soporta múltiples conexiones (de ahí a abrir un hilo por cada conexión entrante nueva: cada conexión entrante genera un socket, y éste se le pasa al hilo) y cierra la conexion cuando desde el equipo remoto escriban "salir".

El programa se cierra cancelando la JVM (Control + C).

Saludos.