Applet

yssouftoure Messages postés 4 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 12 janvier 2006 - 11 oct. 2005 à 11:40
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 13 oct. 2005 à 22:09
bonjours Tout le monde
voila j'ai un probleme ,j'ai fais une application web pour stocker les coordonnees d'une personne ainsi que la photo de cette derniere,mon probleme c'est que je n'arrive pas a envoyer deux fois une image lorsque je veus envoyer une deuxieme fois on me dit :
java.net.bindeException: adress already in use:connect

hst!!!

4 réponses

safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
11 oct. 2005 à 14:05
Si tu peux t'expliquer un peu je crois que ca sera meilleur!

ok?
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
11 oct. 2005 à 19:31
Un petit peu plus d'infos serait la bienvenue !!!



ciao
0
yssouftoure Messages postés 4 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 12 janvier 2006
13 oct. 2005 à 19:00
ok voici le code en totalite avec des commentaire pour expliquer,je l'es simplifier
//-----------------------------x-------------------//
package Tombouctou;
import java.io.*;
import java.io.Serializable;
/*
cette classe encapsule mon image a envoyer sous forme de tableau de bite et un
entier qui me sert de code pour savoire si l'applet a fini d'envoye(code=20)en ce temps cote servlet je ferme le fichier.
*/
public class ImageObject implements Serializable{
public byte[] Byte;
int code;
public ImageObject(byte[] bit,int c){
Byte=bit;
code=c;
}
}

//-----------------------------x-------------------//
package Tombouctou;
/*
c'est une intance de cette classe que l'applet envoye au servlet et de meme le
servlet envoye sa reponse en object de ce type.
la classe a pour partamer l'object seulement a envoyer.
*/
public class TObject implements java.io.Serializable{
Object object;
public TObject(Object obj) {
object=obj;
}
}

//---------------------------x----------------------//
package Tombouctou;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.net.URLConnection;
import javax.swing.border.TitledBorder;

//---Une boite de dialogue pour suivre les evemements
class AppletDialog extends JDialog implements ActionListener{
JLabel etats;
JButton ok;
JPanel bPane;
JPanel laPane;
public AppletDialog(JFrame pere,String etat){
super(pere,"Avertissement",true);
etats=new JLabel("");
etats.setText(etat);
ok=new JButton("OK");
ok.addActionListener(this);
ok.setPreferredSize(new Dimension(100,30));
ok.setFont(new java.awt.Font("Courier New", Font.BOLD, 12));
ok.setBorder(BorderFactory.createRaisedBevelBorder());
bPane=new JPanel();
laPane=new JPanel();
laPane.setLayout(new FlowLayout());
etats.setFont(new Font("Serif",1,15));
bPane.setLayout(new FlowLayout());
bPane.setBorder(BorderFactory.createEtchedBorder());
bPane.add(ok);
laPane.add(etats);
getContentPane().setLayout(new BorderLayout());
getContentPane().add("South",bPane);
getContentPane().add("Center",laPane);
this.setBounds(250,300,450,250);
this.setResizable(true);
this.setVisible(true);
}
public void actionPerformed(ActionEvent evt){
if(evt.getSource()==ok){
this.dispose();
}
}
}//------------------Fin Boite de dialog


//-------une Fenetre pour le parent de la boite de Dialog et pour le FileChooser
class AppletFrame extends JFrame{
public AppletFrame(){
setVisible(false);
}
public void Dispose(){
this.dispose();
}
}
//-------------End Frame--
//-----------La Classe Principale
public class Appletagenda extends JApplet implements ActionListener{
AppletFrame frame=new AppletFrame();
JTabbedPane TabbedPane = new JTabbedPane();
JPanel Pane= new JPanel();
JPanel addPane = new JPanel();
JLabel addphoto = new JLabel();
JButton photob = new JButton();
TitledBorder titledBorder1 = new TitledBorder("");
// Construire l'applet
public Appletagenda() {
}


// Initialiser l'applet
public void init() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
// Initialiser le composant
private void jbInit()throws Exception{
//-----------------------------this disposition---------------------------//
this.getContentPane().setBackground(Color.black);
this.setSize(new Dimension(600,350));
this.getContentPane().setLayout(new BorderLayout());
//-------------------------------photo------------------------------//
addphoto.setFont(new java.awt.Font("Arial", Font.BOLD, 15));
addphoto.setText("Photo");
addphoto.setBounds(new Rectangle(10,222,200,22));


photob.setBounds(new Rectangle(490,222, 100,22));
photob.setFont(new java.awt.Font("Book Antiqua", Font.BOLD, 12));
photob.setBorder(BorderFactory.createRaisedBevelBorder());
photob.setText("Charger");
photob.addActionListener(this);
//---------------------------TabbedPane-----------------------------------//
TabbedPane.setTabPlacement(JTabbedPane.TOP);
TabbedPane.setBackground(SystemColor.inactiveCaptionText);
TabbedPane.setBorder(BorderFactory.createEtchedBorder());
TabbedPane.setPreferredSize(new Dimension(700,250));
//----------------------------Pane---------------------------------------//
Pane.setBackground(SystemColor.inactiveCaptionText);
Pane.setBorder(BorderFactory.createEtchedBorder());
Pane.setPreferredSize(new Dimension(700,50));
//--------------------------addPane-------------------------------------//
addPane.setBorder(BorderFactory.createLoweredBevelBorder());
addPane.setPreferredSize(new Dimension(600,250));
addPane.setToolTipText("Ajout de coordonnees");
addPane.setLayout(null);
addPane.add(photob);
addPane.add(addphoto);
TabbedPane.add(addPane,"AJOUT");
this.getContentPane().add(TabbedPane,java.awt.BorderLayout.CENTER);
this.getContentPane().add(Pane,java.awt.BorderLayout.NORTH);
}

/*url pour pouvoire rentree en communication avec la Servlet
je connumique avec la servlet par Object serialiser
Cette fonction qui retourne un urlconnection a pour parametre le
url_pattern du servlet dans le fichier web.xml
*/
public URLConnection getServletConnection(String varcon)
throws MalformedURLException, IOException {
URL urlServlet = new URL(getCodeBase(),varcon);
URLConnection con = urlServlet.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type","application/x-java-serialized-object");
return con;
}
/* La Fonction Pour l'envoye d'Object et la reception de resultat En Object
Les parametres de cette Fontion sont l'object a envoyer qui de type TObject et
le url_pattern du servlet dans le fichier web.xml,a noté que cette fonction
appele la fonction getServletConnection().
*/
public Object Envoyer(TObject tobject,String var)throws Exception{
//------envoye de l'object pour le servlet
URLConnection con = getServletConnection(var);
OutputStream outstream = con.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstream);
oos.writeObject(tobject);
oos.flush();
oos.close();
//------reception du resultat
InputStream instr = con.getInputStream();
ObjectInputStream inputFromServlet = new ObjectInputStream(instr);
Object result =(Object)inputFromServlet.readObject();
inputFromServlet.close();
instr.close();
return result;
}
//------------------------- Traitement des Evenements -----------------------------
public void actionPerformed(ActionEvent evt){
//---------ActionEvent Pour Button bphoto-------------------------//
if(evt.getSource()==photob){
try{
FileDialog fd=new FileDialog(frame,"Open",FileDialog.LOAD);
fd.setModal(true);
fd.show();
String dir=fd.getDirectory();
String nom=fd.getFile();
File fichier=new File(dir,nom);
RandomAccessFile raf=new RandomAccessFile(fichier,"r");
int l=nom.length();
byte b[]=new byte[l];
String msm="";
ImageObject imageobject;
TObject ttobj;
while(raf.read(b)!=-1){
/* voila ici c'est la partie la plus interessente en fait j'envoye le fichier par
paquet de b avec un code(10) different du code de fin(20),
donc pour chaque paquet l'applet creé une communication avec la servlet
le transfer par paquet par l'applet et l'ecriture coté serveur se fait en temps reel
*/
imageobject= new ImageObject(b,10);
ttobj = new TObject(imageobject);
msm = (String) Envoyer(ttobj, "servletagenda");
}
/*
ici je suis sure que le transfer est terminer don l'applet envoye le code
de fermeture du fichier( chiffre20)
*/
imageobject=new ImageObject(b,20);
ttobj=new TObject(imageobject);
msm=(String)Envoyer(ttobj,"servletagenda");
new AppletDialog(frame,msm);//la boite de dialog affiche l'etat de l'operation
raf.close();// fermeture du fichier cote client
}catch(Exception err){
new AppletDialog(frame,"Client:"+err);
}
}
}
}
le Servlet
package Tombouctou;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
public class Servletagenda extends HttpServlet {
String nom="image.jpg";//un nom donner au fichier
String dir="C:\\Image";// un repertoire chez le serveur
File fichier;
RandomAccessFile raf;// un randonaccessFile
public void init() throws ServletException {
try{
/*
ici je creé le chifier destinateur
*/
fichier = new File(dir,nom);
raf = new RandomAccessFile(fichier, "rw");
}catch(Exception err){
}
}
// Traiter la requête HTTP Post
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
try {
response.setContentType("application/x-java-serialized-object");//formatage de la reponse
//reception de la requette pour la toute premiere invocation
InputStream in = request.getInputStream();
ObjectInputStream inputFromApplet = new ObjectInputStream(in);
TObject tobjrecive=(TObject)inputFromApplet.readObject();//recuperation de l'object de type TObject
//--------------------------//
try {
TObject tobj;
ImageObject img=(ImageObject)tobjrecive.object;
while(img.code!=20){
/* ici aussi la partie clé cote serveur donc pour la premiere
invocation j'ai un paquet de byte envoyer si c'est pas le code de fermetu(20)
je l'ecris dans le fichier destinateur, et je contunie a ecrire tant
que le transfert n'est pas terminer du cote du client, en recevant a chaque fois
le nouveau paquet....
*/
raf.write(img.Byte);
InputStream ins= request.getInputStream();
ObjectInputStream obj= new ObjectInputStream(ins);
tobj= (TObject)obj.readObject();
img=(ImageObject)tobj.object;
}
raf.close();//sortie du while donc fermeture du fichier.
/*
envoye d'un message pour informer que le fichier est bien sauvegarder
*/
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject("Image Sauvegarder");
oos.flush();
oos.close();
} catch (Exception err) {
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject("Erreur_Serveur:"+err);
oos.flush();
oos.close();
}


} catch (Exception err) {
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject("Erreur de doPost:"+err);
oos.flush();
oos.close();
}
}
// Nettoyer les ressources
public void destroy() {
}
private void jbInit() throws Exception {
}
}

j'espers que je suis un peu claire presenetment


merci d'avance a neodante et safisoft


hst!!!
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
13 oct. 2005 à 22:09
lu,

explications ne rime pas avec code source en général non ?

Ce soir j'ai po le temps de regarder y a trop de code ... j'essaierais ce WE



++
0
Rejoignez-nous