Java client serveur

Résolu/Fermé
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012 - 8 mai 2012 à 22:32
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012 - 8 mai 2012 à 23:51
Bonjour,

jai un probléme jenvoi normalment les fichiers via le client ver la machine distante qui es le serveur

les fichiers sont stocker dans la machine distante dans un dossier que je partage.

le probléme c'est quand j'ouvre le jfilechooser dans client et par exemple je click sur annulé du jfilechooser

les fichiers ne senvoi plu et le serveur dans la machine distante se déconect.

voici mon code

//Client//


public void Cliente()
{


int in;
byte[] byteArray;
File archivo = null;
String direccionArchivo = null;
String IP = "127.0.0.1";

try
{
// IP = JOptionPane.showInputDialog(null,"Entrez Lip du pc distant","Cliente",JOptionPane.CANCEL_OPTION);
Socket via = new Socket(IP, 1234);
if(via.isConnected())
{
JOptionPane.showMessageDialog(null, "Conectado al servidor: " + IP);


JFileChooser selector = new JFileChooser();
selector.setDialogTitle("Selecciona el archivo a enviar");
int resultado = selector.showOpenDialog(null);
if (resultado == JFileChooser.APPROVE_OPTION)
{
archivo = selector.getSelectedFile();
direccionArchivo = archivo.getPath().toString();
}




BufferedInputStream bis = new BufferedInputStream(new FileInputStream(direccionArchivo));
BufferedOutputStream bos = new BufferedOutputStream(via.getOutputStream());

//Enviamos el nombre del archivo
DataOutputStream dos = new DataOutputStream(via.getOutputStream());
dos.writeUTF(archivo.getName());


byteArray = new byte[1024];
while ((in = bis.read(byteArray)) != -1)
{
bos.write(byteArray,0,in);
}
// ServerSocket.close();
bis.close();
bos.close();

JOptionPane.showMessageDialog(null, "Le Fichier " + archivo.getName().toString() +
" a bien été envoyé");
String oups=archivo.getName();
String nom=("/llego.msi/");
String gogle="//"+IP+nom+"\""+oups+"\"";

jTextField6.setText(gogle);
System.out.println(gogle);
// String gogle= "\\"+"\\"+IP+nom+oups+""\t;
}

}catch (Exception e) {JOptionPane.showMessageDialog(null,e,"Error",JOptionPane.ERROR_MESSAGE);}

}


//Serveur//


package serveur;
import java.net.*;
import java.io.*;
import javax.swing.*;

class Servidor
{

public String user = System.getProperty("user.name");
public static String nom = System.getProperty("user.home");
public static void main (String[] args)
{
ServerSocket server;
Socket connection = null;

DataOutputStream output;
BufferedInputStream bis;
BufferedOutputStream bos;

byte[] receivedData;
int in;
String file;

try{
server = new ServerSocket(1234);
while ( true ) {
connection = server.accept();
//server.close();


receivedData = new byte[1024];
bis = new BufferedInputStream(connection.getInputStream());
DataInputStream dis = new DataInputStream(connection.getInputStream());
//recibimos el nombre del fichero

file = dis.readUTF();
file = file.substring(file.indexOf('\\')+1,file.length());

//System.out.println(file);
//aqui se escribe el archivo en la ubicacion donde este el Servidor.jar
bos = new BufferedOutputStream(new FileOutputStream("C:\\dossier\"+ file));


while ((in = bis.read(receivedData)) != -1){

bos.write(receivedData,0,in);
}
// server.close();
bos.close();

dis.close();

JOptionPane.showMessageDialog(null, "Fichier (" + file.toString() + ") Reçu");
// System.exit(0);
}
// dis.close();}

}catch (Exception e ) {
// JOptionPane.showMessageDialog(null,e, "Errror",JOptionPane.ERROR_MESSAGE);
}
}
}

2 réponses

KX Messages postés 16635 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 27 novembre 2022 2 982
8 mai 2012 à 22:57
Les réponses sur javafr.com ne t'ont pas plus ? Tu aurais au moins pu faire l'effort de suivre leur conseil quant à l'utilisation des balises de code !

Pour ton programme d'envoi de fichiers, je trouve ça très compliqué, mais tu pourras regarder ici pour le simplifier.

Ensuite, je ne connais pas l'espagnol (si ça en est) donc difficile de suivre les commentaires, mais de toute évidence il te manque un else à cette condition :

if (resultado == JFileChooser.APPROVE_OPTION)

Du coup, File archivo va rester à null, et archivo.getName() devrait planter.
Alors je n'ai pas testé, mais j'imagine que cette ligne là affiche un NullPointerException...

JOptionPane.showMessageDialog(null,e,"Error",JOptionPane.ERROR_MESSAGE);

Bref, tu sais ce qu'il te reste à faire, rajoute un else à ton if, pour ne pas que le programme continue si tu as fait annuler...
1
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
8 mai 2012 à 23:51
je te remercie infiniment KX ça marche impec !!
0