IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

serveur erreur d'envoi d'image


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut simple serveur java
    bonjour j'ai une question stupide

    j'ai fait un court serveur en java

    mais il importe mal les images
    car firefox ne peut pas bien les lire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    public class serveur extends Thread {
     
    	private BufferedReader in;
     
    	private PrintWriter out;
     
    	private Socket X;
     
    	private ServerSocket S;
     
    	public void run() {
    		try {
    			S = new ServerSocket(1004);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		String s = "jhvj";
     
    		while (true) {
     
    			try {
    				X = S.accept();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			connect();
     
    			s = read();
     
    			String[] t = s.split(" HTTP", 2);
    			String[] u = t[0].split("/", 2);
    			File fich;
     
    			if (u[1].equals("")) {
    				fich = new File("C:/ggg/index.html");
    				System.out.println("1" + u[1]);
    			} else {
    				fich = new File("C:/ggg/" + u[1]);
    				System.out.println("2" + u[1]);
    			}
     
    			BufferedReader br = null;
    			try {
    				br = new BufferedReader(new FileReader(fich));
    			} catch (FileNotFoundException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			String line = "";
    			try {
    				line = br.readLine();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			while (line != null) {
    				write(line);
    				try {
    					line = br.readLine();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
     
    			try {
    				br.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
     
    			close();
    		}
     
    	}
     
    	private void connect() {
    		try {
    			in = new BufferedReader(new InputStreamReader(X.getInputStream()));
    			out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(X
    					.getOutputStream())), true);
     
    		} catch (IOException e) {
    			try {
    				X.close();
    			} catch (IOException e2) {
    			}
    		}
    	}
     
    	public void write(String str) {
    		out.println(str);
    	}
     
    	public String read() {
    		String str = "";
    		try {
    			str = in.readLine();
    		} catch (IOException e) {
    		}
    		return str;
    	}
     
    	public void close() {
    		try {
    			X.close();
    		} catch (IOException e) {
    		}
    	}
     
    	public static void main(String[] args) throws IOException {
    		new serveur().start();
    	}
     
    }

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Bonjour,
    moi aussi j'ai fait un petit serveur, et il faut lire/écrire différement les flux binaire et texte.
    Donc pour les images utilise FileInputStream à la place d'un Reader, passe par des byte[], et renvoie dans le OutputStream de la socket.

    D'autre part, je n'ai pas vu ta gestion des headers, mais firefox refuse de lire une image en tant que tel si le "Content-Type" vaut text/html au lieu de img/jpg ou img/gif

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Bonjour

    j'ai fait un client et serveur en java et j'ai je crois le meme probleme
    le texte se lit très bien, mais les images ne passent pas bien du tout
    on m'a dit de lire byte par byte, mais je sais pas comment

    merci
    et j'ai un autre probleme
    dans mon client j'affiche le texte dans un jeditorpane en text/html mais bon ça ne s'affiche pas exactement comme sur un navigateur comme firefox

    et aussi comment rend-on les liens actifs dans un jEditorPane?

    merci pour toute aide

    Code firefox4 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JApplet;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;
    import java.awt.FlowLayout;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.util.StringTokenizer;
     
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.JScrollPane;
    import javax.swing.JEditorPane;
    import javax.swing.JButton;
    import javax.swing.event.HyperlinkEvent;
    import javax.swing.event.HyperlinkListener;
     
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
     
    public class firefox4 extends JApplet{
     
     
     
    	private JPanel jContentPane = null;
    	private JPanel jPanel = null;
    	private JPanel jPanel1 = null;
    	private JPanel jPanel2 = null;
    	private JPanel jPanel3 = null;
    	private JTextField jTextField = null;
    	private JScrollPane jScrollPane = null;
    	private JEditorPane jEditorPane = null;
    	private JEditorPane jEditorPane1 = null;
    	private JButton jButton = null;
    	/**
             * This is the xxx default constructor
             */
    	public firefox4() {
    		super();
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	public void init() {
    		this.setSize(500, 500);
    		this.setContentPane(getJContentPane());
    	}
     
    	/**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(new BorderLayout());
    			jContentPane.add(getJPanel(), BorderLayout.NORTH);
    			jContentPane.add(getJPanel1(), BorderLayout.CENTER);
    		}
    		return jContentPane;
    	}
     
    	/**
             * This method initializes jPanel       
             *      
             * @return javax.swing.JPanel   
             */
    	private JPanel getJPanel() {
    		if (jPanel == null) {
    			jPanel = new JPanel();
    			jPanel.setLayout(new FlowLayout());
    			jPanel.add(getJPanel2(), null);
    			jPanel.add(getJPanel3(), null);
    		}
    		return jPanel;
    	}
     
    	/**
             * This method initializes jPanel1      
             *      
             * @return javax.swing.JPanel   
             */
    	private JPanel getJPanel1() {
    		if (jPanel1 == null) {
    			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
    			gridBagConstraints2.fill = GridBagConstraints.BOTH;
    			gridBagConstraints2.weighty = 1.0;
    			gridBagConstraints2.weightx = 1.0;
    			jPanel1 = new JPanel();
    			jPanel1.setLayout(new GridBagLayout());
    			jPanel1.add(getJScrollPane(), gridBagConstraints2);
    		}
    		return jPanel1;
    	}
     
    	/**
             * This method initializes jPanel2      
             *      
             * @return javax.swing.JPanel   
             */
    	private JPanel getJPanel2() {
    		if (jPanel2 == null) {
    			GridBagConstraints gridBagConstraints = new GridBagConstraints();
    			gridBagConstraints.fill = GridBagConstraints.VERTICAL;
    			gridBagConstraints.weightx = 1.0;
    			jPanel2 = new JPanel();
    			jPanel2.setLayout(new GridBagLayout());
    			jPanel2.add(getJTextField(), gridBagConstraints);
    		}
    		return jPanel2;
    	}
     
    	/**
             * This method initializes jPanel3      
             *      
             * @return javax.swing.JPanel   
             */
    	private JPanel getJPanel3() {
    		if (jPanel3 == null) {
    			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
    			gridBagConstraints3.gridx = 1;
    			gridBagConstraints3.gridwidth = 1;
    			gridBagConstraints3.gridy = 0;
    			jPanel3 = new JPanel();
    			jPanel3.setLayout(new GridBagLayout());
    			jPanel3.add(getJButton(), gridBagConstraints3);
    		}
    		return jPanel3;
    	}
     
    	/**
             * This method initializes jTextField   
             *      
             * @return javax.swing.JTextField       
             */
    	private JTextField getJTextField() {
    		if (jTextField == null) {
    			jTextField = new JTextField();
    		}
    		jTextField.setPreferredSize(new Dimension(400, 20));
    		jTextField.setText("http://127.0.0.1:1004/divider_fade.gif");
    		return jTextField;
    	}
     
    	/**
             * This method initializes jScrollPane  
             *      
             * @return javax.swing.JScrollPane      
             */
    	private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setViewportView(getJEditorPane1());
    			jEditorPane1.setContentType("text/html");
    			jEditorPane1.setAutoscrolls(true);
    			jEditorPane1.setEditable(true);
    			jEditorPane1.addHyperlinkListener(new MenuPaneHyperlinkListener());
    			jEditorPane1.setText("<br>putain<br><br>merde");
     
    		}
    		return jScrollPane;
    	}
     
    	/**
             * This method initializes jEditorPane1 
             *      
             * @return javax.swing.JEditorPane      
             */
    	private JEditorPane getJEditorPane1() {
    		if (jEditorPane1 == null) {
    			jEditorPane1 = new JEditorPane();
    		}
    		return jEditorPane1;
    	}
     
    	/**
             * This method initializes jButton      
             *      
             * @return javax.swing.JButton  
             */
    	private JButton getJButton() {
    		if (jButton == null) {
    			jButton = new JButton();
    			jButton.setText(">>");
    			jButton.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					play(getCodeBase(), "audio/gong.au");
    					jEditorPane1.setText("");
    		        	String s=jTextField.getText();
     
    		        	String[] t=s.split("/", 4);
    		        	String[] u=t[2].split(":", 4);
     
    		        	int port=80;
    		        	if (u.length>1){ port=Integer.parseInt(u[1]);}
    		        	System.out.println(port);
     
    		        	InetAddress addr=null;
    					try {
    						addr = InetAddress.getByName(u[0]);
    					} catch (UnknownHostException e1) {
    						e1.printStackTrace();
    					}
    					Socket socket=null;
    		        	try {
    						socket = new Socket(addr, port);
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
    					PrintStream out=null;
    					BufferedReader in=null;
    					try {
    						out = new PrintStream(socket.getOutputStream());
    						in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
    					if (t.length==4){
    	        			out.println("GET /"+t[3]);
    	        		}
    	        		else{
    	        			out.println("GET /");
    	        		}
    	        		String line="";
    					try {
    						line = in.readLine();
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
    	    			String text="";
     
    	    			while (line!=null){
    	    				text+=line+"<br>";
     
    	    				try {
    							line=in.readLine();
    						} catch (IOException e1) {
    							e1.printStackTrace();
    						}
    	    			}
    	    			jEditorPane1.setText(text);
    	    			System.out.println(text);
    	    			try {
    						socket.close();
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
     
     
    				}
    			});
    		}
    		return jButton;
    	}
     
     
    }
     
     
     
    class MenuPaneHyperlinkListener implements HyperlinkListener//, ActionListener
    {
        public void hyperlinkUpdate(HyperlinkEvent e) {
          if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
            StringTokenizer st = new StringTokenizer(e.getDescription(), " ");
            if (st.hasMoreTokens()) {
              String s = st.nextToken();
              System.err.println("token: " + s);
            }
          }
        }
     
    	/*public void actionPerformed(ActionEvent e) {
    		if (((HyperlinkEvent) e).getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
     
    	}*/
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut serveur erreur d'envoi d'image
    Bonjour,

    quand on se connecte à ce seveur ci-dessoushttp://127.0.0.1:1004/uneimage.jpg
    ce serveur java transmet bien le texte mais mal les images,
    des fois, il y a une erreur de buffer size

    il faut m'aider SVP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
    48
    49
    public class serveur  {
     
    	public static void main(String[] args) throws IOException {
    		ServerSocket server = new ServerSocket(1004);
    		String t = "jhvj";
     
    			while (true) {
    				Socket S = server.accept();
     
     
    				BufferedReader in = new BufferedReader(new InputStreamReader(S.getInputStream()));
    				//PrintWriter out = new PrintWriter(S.getOutputStream());
    				PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(S
    						.getOutputStream())), true);
     
    				t = in.readLine();
    				String[] u = t.split(" HTTP", 2);
    				String[] v = u[0].split("/", 2);
    				File fich;
    				if (v[1].equals("")) {
    					fich = new File("C:/MATLAB7/help/index.html");
    				} else {
    					fich = new File("C:/MATLAB7/help/" + v[1]);
    				}
    				BufferedReader br = null;
     
    				br = new BufferedReader(new FileReader(fich));
     
     
    				String line = "";
     
    				line = br.readLine();
     
    				while (line != null) {
    					out.println(line);
    					line = br.readLine();	
    				}
     
     
    				br.close();
     
     
    				S.close();
    			}
     
     
    	}
     
    }

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu utilise des reader et des writer pour manipuler un fichier binaire (une image), çà va tout te corrompre. Pour du binaire faut attaquer direct les interface inputstream/outputstream, tu peux oublier readline print et autres associés à l'interface Writer et Reader!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    ok c'est un peu ce qu'on m'a dit
    il faut lire/ecrire byte par byte

    mais peut tu ecrire les lignes de code parceque j'ai deja essayé sans que ça marche bien

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu utilise des reader et des writer pour manipuler un fichier binaire (une image), çà va tout te corrompre. Pour du binaire faut attaquer direct les interface inputstream/outputstream, tu peux oublier readline print et autres associés à l'interface Writer et Reader!
    ok j'avais deja essayé de lire direct du binaire, mais ça lisait pas le texte
    j'ai pas essayé sur des images peut etre ça marche

    bon si je veux lire (ou envoyer) un document qui contient images et texte comment je fais pour savoir ce qui va arriver text ou image pour adapter les readers et writers?

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu peut très bien traiter un texte comme du binaire, çà pose aucun problème! De toutes facons, en définitive, le support est binaire. Le seul avantage de traiter le texte avec un reader serait de pouvoir le manipuler.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    bonjour
    est ce que tu me dire comment lire de façon binaire
    j'ai deja essayé mais ça marche pas
    merci de ton aide

    par exemple ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BufferedReader in = new BufferedReader(newInputStreamReader(S.getInputStream()));
    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(S.getOutputStream())), true);				
    t = in.readLine();
    while (line != null) {
    		out.println(line);
    		line = br.readLine();	
    			}
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PrintStream sout = new PrintStream(client.getOutputStream());
    InputStream entrant = socket.getInputStream();
    byte [] buffer = new byte[4096];
    int lus;
     
    while ((lus = entrant.read(buffer)) != -1) {
    sout.write(buffer,0,lus);
    }

Discussions similaires

  1. [iOS 4.x] Envoi d'image via requête http a un serveur distant
    Par salma.mathlouthi dans le forum Objective-C
    Réponses: 0
    Dernier message: 26/10/2012, 16h28
  2. [C#]envoi des images client/serveur
    Par DavidPAY dans le forum C#
    Réponses: 1
    Dernier message: 18/12/2007, 16h26
  3. Réponses: 2
    Dernier message: 22/05/2007, 16h11
  4. [Sql serveur] erreur reso general dans ma requete
    Par speed034 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/01/2006, 18h54
  5. [Upload] Upload : erreur et envoi multiple
    Par linou dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo