envoyer le fichier puis message par socket

J'essaie d'envoyer un fichier à partir d'un client à un serveur. Le serveur reçoit le fichier puis envoyer un message de confirmation au client.

Mon problème est que le client cesse de répondre lorsqu'il est en attente de la confirmation.

Serveur :

import java.net.*;
import java.io.*;
public class Server {
public static void main(String args[]) throws IOException {
int port = 1234;
ServerSocket server_socket;
server_socket = new ServerSocket(port);
System.out.println("Server waiting for client on port "
+ server_socket.getLocalPort());
//server infinite loop
while (true) {
Socket socket = server_socket.accept();
System.out.println("New connection accepted "
+ socket.getInetAddress() + ":" + socket.getPort());
try {
byte[] b = new byte[1024];
int len = 0;
int bytcount = 1024;
String FileName = "C:\\test\\java\\tmp\\sentfile.pdf"; 
FileOutputStream inFile = new FileOutputStream(FileName);
InputStream is = socket.getInputStream();
BufferedInputStream in2 = new BufferedInputStream(is, 1024);
while ((len = in2.read(b, 0, 1024)) != -1) {
bytcount = bytcount + 1024;
inFile.write(b, 0, len);
}
System.out.println("Bytes Writen : " + bytcount);
//Sending the response back to the client.
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.flush();
oos.writeObject("ok");
System.out.println("Message sent to the client is "+"ok");
in2.close();
inFile.close();
} catch (IOException e) {
System.out.println("Unable to open file" + e);
return;
}
socket.close();
System.out.println("Connection closed by client");
}
}
}

Client :

import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws UnknownHostException,
IOException, ClassNotFoundException {
int port = 1234;
Socket socket = null;
//connect to server
socket = new Socket("127.0.0.1", port);
try {
byte[] buf = new byte[1024];
OutputStream os = socket.getOutputStream();
BufferedOutputStream out = new BufferedOutputStream(os, 1024);
String file = "C:\\test\\java\\client\\source.pdf"; 
FileInputStream in = new FileInputStream(file);
int i = 0;
int bytecount = 1024;
while ((i = in.read(buf, 0, 1024)) != -1) {
bytecount = bytecount + 1024;
out.write(buf, 0, i);
out.flush();
}
System.out.println("Bytes Sent :" + bytecount);
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String confirmation = (String) ois.readObject();
System.out.println("from server : " + confirmation);
out.close();
in.close();
} catch (IOException e) {
System.out.println(e);
}
socket.close();
}
}
Peut-être vous n'avez pas de rincer votre outputstream côté serveur? Vous voyez le message: Message sent to the client is ok?
vais commenter sur le uresponsive partie. Si le client est en attente d'une réponse (lire la réponse) alors j'imagine que ça va être de répondre. Avez-vous envisagé de faire la demande dans un thread séparé?
sur le côté client, il est bloqué après "Octets Envoyés:..". si j'commentaire de la première partie, il est de travail. Si je commente la deuxième partie, il est de travail. À la fois, n'est pas pas de travail.
Et sur le côté serveur, il n'est pas écrit "octet écrit:...". Mais Lors de la seconde partie est un commentaire, il fonctionne parfaitement.
Votre code ne peut pas être compilé après un simple copier/coller. Si vous souhaitez obtenir de l'aide, ajouter SSCCE style code ici. Ne faites pas de nous pour faire votre routine.

OriginalL'auteur ophelie88 | 2011-06-30