Bonjour, j'ai entrain de développer une application qui comporte deux patrie client et serveur , on doit envoyer un fichier xml du coté client vers serveur, et aprés un traitement par le serveur , ce dernier doit envoyer un fichier exécutable '*.apk', pour cela on a utilisé les sockets . tout ça passe bien . mais pour qu'il soit plus utilisable on a ajouté un interface graphique avec deux boutons "connect" et déconnect" , on veux lors de la clique sur "connect " le serveur peut toujours recevoir des fichiers de plusieurs clients .Si on clique sur "déconnect" la connexion doit achevé . mais j'ai un problème qui est indiqué ci_dessous:
java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source) at java.net.AbstractPlainSocketImpl.bind(Unknown Source) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.<init>(Unknown Source) at java.net.ServerSocket.<init>(Unknown Source) at ServPack.Envoie_apk_generer_socket.lancer(Envoie_apk_generer_socket.java:15) at ServPack.Compilation.apk(Compilation.java:26) at ServPack.Serveur.main(Serveur.java:62)
public class Serveur {
static int connect=0;
static String cheminFichiers="C:/Users/asma/fichiersPfe/";
//cheminFichiers contient les fichiers fichier.bat,compile.bat et les images pour Drawable
public static void main(String[] args) throws IOException, InterruptedException {
new Interface().setVisible(true);
while(true){
while(connect==1){
System.out.println("***debut class serveur***");
//recevoir le fichier xml du client
ReceptionFichierXml.lancer();
// un traitement par serveur
// ......
//compiler en ligne de commande
Compilation.apk();
//envoyer apk vers application android
Envoie_apk_generer_socket.lancer();
}
}
}
}
public static void lancer(){
try{
ServerSocket ss = new ServerSocket(4000);
System.out.println("Running............");
//while(true)
//{
Socket s = ss.accept();
System.out.println("accept");
FileInputStream fis = new FileInputStream(CreateProject.chemin1+"/bin/MainActivity-debug.apk");
byte [] buffer = new byte[fis.available()];
fis.read(buffer);
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(buffer);
oos.close();
s.close();
//}
}catch (NumberFormatException e){
e.printStackTrace();
}catch (UnknownHostException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
Es-tu sûr que lorsque tu cliques sur "Disconnect" tu appelles bien ton code pour fermer la connexion ? Car l'exception t'informe que tu as déjà un socket actif à ton couple adresse:port. Ça laisserait penser qu'au lieu de fermer ton socket tu en ouvres un nouveau.
Ah ok, donc lors de l'exécution il faut cliquer sur "disconnect " ce qui signifiera qu'on peut pas faire plusieurs transfères de données par une socket , on ait obliger de fermer la socket. c ça?
Cela signifie que tu ne peux avoir qu'un socket à la fois écoutant sur un même port pour une adresse donnée. Mais sur un socket tu peux faire autant de transferts de données que tu le souhaites.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
CTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr
CTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr