J'ai utilisé le concept de socket serveur dans java pour transférer des fichiers comme des images et des vidéos. Mais quand je reçois du côté client, je personnalise les noms de fichiers. Puis-je obtenir le nom d'origine du fichier tel quel?Transfert de fichiers de socket serveur
Par exemple:
Si le fichier de fin du serveur pour le transfert est « abc.txt », j'ai besoin ce même nom se refléter dans la fin du client (sans passer le nom séparément).
En fin de serveur:
public class FileServer {
public static void main (String [] args) throws Exception {
// create socket
ServerSocket servsock = new ServerSocket(13267);
while (true) {
System.out.println("Waiting...");
Socket sock = servsock.accept();
System.out.println("Accepted connection : " + sock);
OutputStream os = sock.getOutputStream();
new FileServer().send(os);
sock.close();
}
}
public void send(OutputStream os) throws Exception{
// sendfile
File myFile = new File ("C:\\User\\Documents\\abc.png");
byte [] mybytearray = new byte [(int)myFile.length()+1];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
}
}
En fin de compte client:
public class FileClient{
public static void main (String [] args) throws Exception {
long start = System.currentTimeMillis();
// localhost for testing
Socket sock = new Socket("127.0.0.1",13267);
System.out.println("Connecting...");
InputStream is = sock.getInputStream();
// receive file
new FileClient().receiveFile(is);
long end = System.currentTimeMillis();
System.out.println(end-start);
sock.close();
}
public void receiveFile(InputStream is) throws Exception{
int filesize=6022386;
int bytesRead;
int current = 0;
byte [] mybytearray = new byte [filesize];
FileOutputStream fos = new FileOutputStream("def");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
bos.close();
}
}
Mais la chose est que j'important un tableau de fichiers comme ça au client. Impossible d'ajouter le nom du fichier au tableau d'octets du fichier. Si oui, dites-moi s'il vous plaît comment le faire. – Arun
@Arun Bien sûr, vous avez juste besoin de concevoir un protocole. Quelle méthode/protocole de sérialisation utilisez-vous? Y compris le code qui envoie ou reçoit réellement les fichiers (<15 lignes) dans la question serait d'une grande aide. – phihag
J'ai édité ma question avec le code source complet. Ceci est en fait tiré des liens postés dans cette question. Merci de m'aider. Désolé pour la réponse tardive. – Arun