Tema: Transferencia de archivos usando sockets
Pregunta: ¿Como puedo enviar archivos de cualquier tipo usando sockets?
Respuesta: La solución a este problema es muy sencilla, se establece una comnicación cliente - servidor y se transfiren los bytes pertencientes al archivo a transmitir, en el ejemplo que se muestra a continuación el cliente envía un archivo de nombre php.pdf al servidor y este lo escribe en su disco.
Servidor.java
Código:
/*
* Servidor.java
*
* Author: Antony Delgado
* Created: 31 de Agosto de 2006
*/
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor implements Runnable {
ServerSocket server;
public Servidor() {
try {
//CREAMOS EL SOCKET DEL SERVIDOR
server=new ServerSocket(2002);
System.out.println("Servidor corriendo...");
} catch(Exception e) {
System.out.println("Error al correr el servidor\n"+e);
System.exit(1);
}
}
public void run() {
Socket client=null;
while (true) {
if (server==null)
return;
try {
//ESPERA A QUE LLEGUE UN CLIENTE
client=server.accept();
System.out.println("Llegó un cliente!");
} catch(java.io.IOException e) {
System.err.println("No se pudo establecer conexión " + e.getMessage());
}
try {
//ABRIMOS UN BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO
java.io.InputStream in = client.getInputStream();
//CREAMOS LA INSTANCIA PARA ESCRIBIR EL ARCHIVO EN DISCO
java.io.FileOutputStream out = new java.io.FileOutputStream(new java.io.File("C:\\php.pdf"));
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
} catch(java.io.IOException e) {
System.out.println("Error: " + e);
}
}
}
public static void main(String a[]) {
Servidor servidor = new Servidor();
// Ponemos a correr nuestro hilo servidor
new Thread(servidor).start();
}
}
Cliente.java
Código:
/*
* Cliente.java
*
* Author: Antony Delgado
* Created: 31 de Agosto de 2006
*/
import java.net.Socket;
import java.io.InputStreamReader;
public class Cliente {
private String ip = "127.0.0.1";//O localhost o la que quieras 192.168.0.1 etc...
private int puerto = 2002;
private String nomArchivo = "D:\\Antony\\REDES\\php.pdf";
public Cliente(){
Socket socket = null;
java.io.FileInputStream in = null;
java.io.FileOutputStream pt = null;
try {
socket = new Socket(ip,puerto);
pt = (java.io.FileOutputStream)socket.getOutputStream();//
in = new java.io.FileInputStream(new java.io.File(nomArchivo));
} catch(Exception e) {
System.out.println("No se pudo crear la conexión\n"+e);
}
try {
socket.sendUrgentData(100);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0 ){
pt.write(buf, 0, len);
}
pt.close();
in.close();
socket.close();
} catch(Exception e) {
System.out.println("Error al enviar mensaje\n"+e);
}
}
public static void main(String a[]) {
new Cliente();
}
}
Java, Que nota de lenguaje