[Socket] Fermeture correcte
Bonjour,
vous l'aurez peut-être remarqué que tous mes problèmes sont basés sur le concept des sockets, cette fois-ci je cherche le meilleur moyen de fermer son (client/serveur) après un transfert de fichiers, le mien m'affiche l'erreur : (Connection reset by peer) je pense que j'interrompe la connexion avant qu'elle ait fini, mais je ne sais pas comment résoudre ça, voici mon code :
Envoi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
OutputStream os = null;
DataOutputStream dos = null;
Socket sock = null;
try {
sock = new Socket("127.0.0.1", 80);
File myFile = new File("D:\\Zest\\1.png");
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
dis.readFully(mybytearray, 0, mybytearray.length);
os = sock.getOutputStream();
dos = new DataOutputStream(os);
dos.writeUTF(myFile.getName());
dos.writeLong(mybytearray.length);
dos.write(mybytearray, 0, mybytearray.length);
dos.flush();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
os.close();
dos.close();
sock.close();
} catch (IOException ex) {
Logger.getLogger(Envoyer.class.getName()).log(Level.SEVERE, null, ex);
System.out.print("Erreur 1: " + ex.getMessage());
} |
Réception:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
public class thread_envoi extends Thread {
@Override
public void run() {
try {
int bytesRead;
int current = 0;
ServerSocket serverSocket = null;
serverSocket = new ServerSocket(80);
while(true) {
Socket clientSocket = null;
clientSocket = serverSocket.accept();
InputStream in = clientSocket.getInputStream();
DataInputStream clientData = new DataInputStream(in);
String fileName = clientData.readUTF();
OutputStream output = new FileOutputStream("D:\\"+fileName);
long size = clientData.readLong();
byte[] buffer = new byte[1024];
while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int)Math.min(buffer.length, size))) != -1)
{
output.write(buffer, 0, bytesRead);
size -= bytesRead;
}
in.close();
clientData.close();
output.close();
} } catch (IOException ex) {
Logger.getLogger(Recevoir.class.getName()).log(Level.SEVERE, null, ex);
}
}
} |
Merci pour votre aide !