HttpConnection et DataOutputStream/DataInputStream
Bonjour à tous,
Je rencontre un problème avec l'utilisation du DataOutputStream/DataInputStream lorsque j'essaye d'envoyer des données à une servlet.
1- Je ne rencontre pas ce problème sur l'émulateur mais seulement qd je teste sur un téléphone, sur réseau SFR (pas essayer avec un autre)
2- le problème se situe alors au niveau de la Servlet lorsque le DataInputStream din essaye de faire un readUTF(). J'ai alors :
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323)
at java.io.DataInputStream.readUTF(DataInputStream.java:572)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at ServletMobile.doGet(ServletMobile.java:71)
3- Si je tente seulement un connection à la servlet et un envoi de texte au téléphone depuis la servlet (DataOutput depuis la servlet et DataInput sur le téléphone (cad l'inverse de ci-dessus) ca marche sans problème ....
Quelqu'un a til déjà à faire à cette situation ? Quelqu'un comprend il le problème ?
D'avance Merci,
Olivier
Côté Mobile
Citation:
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
/**
* An example MIDlet to invoke a CGI script.
*/
public class ThirdExample extends MIDlet {
private Display display;
String url = "http://blablabalb/Mobile";
public ThirdExample() {
display = Display.getDisplay(this);
}
/**
* Initialization. Invoked when we activate the MIDlet.
*/
public void startApp() {
try {
getGrade(url);
} catch (IOException e) {
System.out.println("IOException " + e);
e.printStackTrace();
}
}
/**
* Pause, discontinue ....
*/
public void pauseApp() {
}
/**
* Destroy must cleanup everything.
*/
public void destroyApp(boolean unconditional) {
}
/**
* Retrieve a grade....
*/
void getGrade(String url) throws IOException {
HttpConnection c = null;
InputStream is = null;
DataInputStream din = null;
OutputStream os = null;
DataOutputStream dout = null;
StringBuffer b = new StringBuffer();
TextBox t = null;
int x = 5, y =7;
try {
c = (HttpConnection)Connector.open(url);
c.setRequestMethod(HttpConnection.GET);
c.setRequestProperty("IF-Modified-Since", "10 Nov 2000 17:29:12 GMT");
c.setRequestProperty("User-Agent","Profile/MIDP-1.0 Confirguration/CLDC-1.0");
c.setRequestProperty("Content-Language", "en-CA");
os = c.openOutputStream();
dout = new DataOutputStream(os);
dout.writeUTF("le ciel est beau les amis");
is = c.openDataInputStream();
din = new DataInputStream(is);
String bString = din.readUTF();
t = new TextBox("Final Grades", bString, 1024, 0);
} finally {
if(is!= null) {
is.close();
}
if(os != null) {
os.close();
}
if(c != null) {
c.close();
}
}
display.setCurrent(t);
}
}
Côté Servlet
Citation:
public class ServletMobile extends HttpServlet {
/**
* 123
*/
private static final long serialVersionUID = 1L;
public static final String BINARY = "application/octet-stream";
private static final int UTF = 0;
private static final int INT = 1;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//création de la session si besoin
System.out.println("recu !!!");
InputStream in = request.getInputStream();
DataInputStream din = new DataInputStream(in);
System.out.println(din.readUTF());
OutputStream out = response.getOutputStream();
DataOutputStream dout = new DataOutputStream(out);
dout.writeUTF("ben la ca a marche faut voir");
if (dout !=null){
try{
dout.close();
}catch(IOException e){}
}
if ( out != null){
try{
out.close();
}catch(IOException e){}
}
System.out.println("fin !!!");
}
Le problème vient du réseau SFR
Je viens de trouver un portable Orange et cette petite appli de test marche...Le problème vient du réseau SFR.
Est ce que quelqu'un a déjà eut ce problème et sait comment le contourner ?
Cordialement,
Olivier
Les config et les connexions
Les portables utilisées sont tous au moins midp 2.0 et CLDC 1.0 et j'avais mis l'appli en midp 2.0 CLDC 1.0
Les portables que j'avais sous la main sont un sony ericson W300 avec Orange (edge) , un Z530i (gprs) avec SFR et un samsung L760 (UMTS) (SFR aussi)
D'après ton post le problème viendrait de la configuration de connection sous GRPS et UMTS. Comment configurer tout cela ?
J'ai farfouiller un peu pour le samsung dans les mode de connexion et il y un mode spécial java avec ne connection en HTTP et une adresse de connection laissé vide. J'ai vérifié c'est bien ce dernier qu'utilise mon application.
Je réinsiste sur le fait qu'avec SFR quoiqu'il arrive je me connecte au serveur mais je ne peux pas envoyé de données depuis le téléphone vers le serveur. Par contre je peux envoyé des données depuis le serveur vers le téléphone.
D'avance Merci,
Olivier