Je travaille actuellement avec Java Sockets. J'ai créé un code côté serveur et un code côté client pour transférer le fichier par socket. J'ai réussi à transférer les fichiers du client vers le serveur avec le même système, mais si j'ai essayé avec les différents systèmes sur une plate-forme différente, alors cela ne fonctionne pas. Les codes côté client et côté serveur sont donnés ci-dessous.Comment transférer un fichier en utilisant IOUtils.copy via Java Sockets
code côté serveur
public class FileTransferTestServer extends Thread{
private final Socket socket;
public FileTransferTestServer(Socket socket) {
// TODO Auto-generated constructor stub
this.socket = socket;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket serverSocket = new ServerSocket(5000);
Socket socket = serverSocket.accept();
System.out.println("Connection Established with "+socket.getInetAddress().getHostAddress());
new FileTransferTestServer(socket).start();
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run(){
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String buffer = null;
String fileName = null;
if((buffer = br.readLine()) != null){
fileName = buffer;
}
FileOutputStream fos = new FileOutputStream(fileName);
int res = IOUtils.copy(is, fos);
System.out.println("res : "+res);
is.close();
fos.flush();fos.close();
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Code côté client
public class FileTransferClient {
public FileTransferClient() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket socket = new Socket("172.16.4.23",5000);
File file = new File("/Users/Guest/Desktop/DQM.txt");
OutputStream outputStream = socket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream);
out.println("file-transfer");
out.flush();
out.println(""+file.getName());
out.flush();
FileInputStream fis = new FileInputStream(file);
int res = IOUtils.copy(fis, outputStream);
out.flush();
outputStream.flush();
outputStream.close();
fis.close();
System.out.println("res : "+res);
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Comment faire de ce programme pour transférer des fichiers entre le système
J'ai essayé avec Windows (Server) & Mac OS X (Client) et Windows (Serveur) & LinuxMint (Client)
Remarque: 1. Je souhaite envoyer le nom de fichier suivi du contenu du fichier. 2. Le contenu du fichier peut être sous n'importe quelle forme (fichier texte ou binaire)
Pouvez-vous donner un extrait de code s'il vous plaît. –
@GowthamShanmugaraj J'ai mis à jour ma réponse. –
Oui, ça marche :). Merci [Peter Lawrey] (http://stackoverflow.com/users/57695/peter-lawrey) –