Java.net.SocketException: Unexpected end of file from server

Signaler
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007
-
djito79
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007
-
chèr tous ,
Pourriez vous m'aider à comprendre s'il vous plaît ce que signifie l'erreur
 java.net.SocketException: Unexpected end of file from server
je reçois cette erreur en appelant HttpUrlConnection.getResponseCode()
Merci beaucoup
Djito79

10 réponses

Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
Salut,

en gros tu as eu un EOF (end of file) plutôt que prévu pour une résolution de ton prob faut plus d'info

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007

okii voici le code ke j'exécute

public class Refill {
 
  private static String defaultServer = "http://192.168.0.78:10010/Air/";
  private static  int  response;
  
  public static void main(String[] args) {
  
    try {
      URL u = new URL(defaultServer);
      URLConnection uc = u.openConnection();
      System.out.println("connection is opened");
      HttpURLConnection connection = (HttpURLConnection) uc;
      connection.setDoOutput(true);
      connection.setDoInput(true);
      connection.setRequestMethod("POST");
      OutputStream out = connection.getOutputStream();
      OutputStreamWriter wout = new OutputStreamWriter(out, "UTF-8");
       
      wout.write("<?xml version="1.0"?>\r\n"); 
      wout.write("<methodCall>\r\n");
      wout.write("<methodName>RefillTRequest</methodName>\r\n");
      wout.write("  \r\n");
      wout.write("    \r\n");
      wout.write("  <value>\r\n");
      wout.write("  <struct>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>originNodeType</name>\r\n");
      wout.write("  <value>\r\n"); 
      wout.write("        <string>EXT</string>\r\n");       
      wout.write("  </value>\r\n");
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>originHostName</name>\r\n");
      wout.write("  <value>\r\n"); 
      wout.write("        <string>192.168.0.69</string>\r\n");       
      wout.write("  </value>\r\n");
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>originTransactionID</name>\r\n");
      wout.write("  <value>\r\n");
      wout.write("        <string>1136807058750</string>\r\n");   
      wout.write("  </value>\r\n");    
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>originTimeStamp</name>\r\n");
      wout.write("  <value>\r\n");
      wout.write("        <dateTime.iso8601>20050422T14:15:21+0200</dateTime.iso8601>\r\n");      
      wout.write("  </value>\r\n"); 
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>subscriberNumber</name>\r\n");
      wout.write("  <value>\r\n"); 
      wout.write("        <string>97580000</string>\r\n");
      wout.write("  </value>\r\n");      
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>transactionAmountRefill</name>\r\n");
      wout.write("  <value>\r\n");
      wout.write("        <string>2000</string>\r\n");
      wout.write("  </value>\r\n");       
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>paymentProfileID</name>\r\n");
      wout.write("  <value>\r\n"); 
      wout.write("        <string>23</string>\r\n");      
      wout.write("  </value>\r\n");  
      wout.write("  </member>\r\n");
      wout.write("  <member>\r\n");
      wout.write("     <name>transactionCurrency</name>\r\n");
      wout.write("  <value>\r\n");
      wout.write("        <string>UNT</string>\r\n");   
      wout.write("  </value>\r\n");    
      wout.write("  </member>\r\n");
      wout.write("  </struct>\r\n");
      wout.write("  </value>\r\n");
      wout.write("   

\r\n");
      wout.write(" 

\r\n");
      wout.write("</methodCall>\r\n");
      wout.flush();
      System.out.println("xml request is sent to the server");
      out.close();
      InputStream in = connection.getInputStream(); //// je reçois l'errur ici
      while ((response = in.read()) != -1) {
                System.out.println("Server: " + response);
        }
     in.close();
     out.close();
     connection.disconnect();
    }
    catch (IOException e) {
      System.err.println(e);
      e.printStackTrace();
    }
  }
  
  }  // end main

je reçois donc l'erreur en appelant InputStream in = connection.getInputStream(); S'il vous plait expliquez moi juste le problème
Merci
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
Salut,

déjà enlève le out.close();

[...]
wout.write("</methodCall>\r\n");
wout.flush();
System.out.println("xml request is sent to the server");
<strike>out.close();</strike>
InputStream in = connection.getInputStream(); //// je reçois l'errur ici
while ((response = in.read()) != -1) {
    System.out.println("Server: " + response);
}
in.close();
out.close();//tu le fermes déjà ici
connection.disconnect();
[...]

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007

Merci pour votre réponse..
je l'ai éssayé mais j'ai tjrs la même erreur
voici le rapport de l'erreur à la ligne 90  c-à-d  à la  ligne  
InputStream in = connection.getInputStream(); //// je reçois l'errur ici

----------------------------------Rapport de l'erreur --------------
connection is opened
xml request is sent to the server
java.net.SocketException: Unexpected end of file from server
java.net.SocketException: Unexpected end of file from server
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:684)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:554)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:571)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:936)
        at Refill.main(Refill.java:90)

--------------fin du rapport ------------------
Est ce qu'on peut contourner ceete erreur autrement
Merci beaucoup
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
Salut,

tu as essayé d'initialiser le inputstream avant ton ecriture defois qu'elle soit cause du problème ? (on ne sait jamais l'ecriture peut mal se passer coté serveur du coups il se met dans un état instable...)

exemple :
[...]
OutputStream out = connection.getOutputStream();
OutputStreamWriter wout = new OutputStreamWriter(out, "UTF-8");
InputStream in = connection.getInputStream();
[...]
while ((response = in.read()) != -1) {
    System.out.println("Server: " + response);
}
[...]

sinon pourquoi tu envoi ligne par ligne ton message ? tu ne peux pas le mettre dans un buffeur et l'envoyer d'un bloc ?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007

Oui salut
Merci beacoup pour l'intêret que tu portes à ma question..
mais je ne sais pas cmt utiliser les buffer et mon problème ne setrouve pas au niveau de l'envoie des requettes au serveur .C'est en voulant recevoir la réponse du serveur ke j'ai cette erreur .Lorsque je mets cette partie en commentaire , tout sepasse bien ..mais mon problème c'est ke je n'ai pas la réponse du serveur...
si non l'envoie se passe bien
Espérant te lire bientôt
Merci
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
Salut,

tu as testé au moins de déplacer la recup de l'inputstream ?

sinon voici un exemple illustrant les buffer et le déport de l'inputstream (ici j'utilise des objets du jdk 1.5) :

en gras ce que j'ai modifié

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

public class Refill {
    private static final String    DEFAULT_SERVER    = "http://192.168.0.78:10010/Air/";

    public static void main(String ... args) {
        try {
            URL u = new URL(DEFAULT_SERVER);
            URLConnection uc = u.openConnection();
            System.out.println("connection is opened");
            HttpURLConnection connection = (HttpURLConnection) uc;
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");
            OutputStreamWriter wout = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
            Scanner scanner = new Scanner(connection.getInputStream());
            wout.write(buildXml());
            wout.flush();
            System.out.println("xml request is sent to the server");
           
            while(scanner.hasNext())
                System.out.println("Server: " + scanner.next());
            scanner.close();
            wout.close();
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    private static String buildXml() {
        StringBuilder builder = new StringBuilder();
        builder.append("<?xml version="1.0"?>\r\n");
        builder.append("<methodCall>\r\n");
        builder.append("<methodName>RefillTRequest</methodName>\r\n");
        builder.append("  \r\n");
        builder.append("    \r\n");
        builder.append("  <value>\r\n");
        builder.append("  <struct>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>originNodeType</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>EXT</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>originHostName</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>192.168.0.69</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>originTransactionID</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>1136807058750</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>originTimeStamp</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <dateTime.iso8601>20050422T14:15:21+0200</dateTime.iso8601>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>subscriberNumber</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>97580000</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>transactionAmountRefill</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>2000</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>paymentProfileID</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>23</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  <member>\r\n");
        builder.append("     <name>transactionCurrency</name>\r\n");
        builder.append("  <value>\r\n");
        builder.append("        <string>UNT</string>\r\n");
        builder.append("  </value>\r\n");
        builder.append("  </member>\r\n");
        builder.append("  </struct>\r\n");
        builder.append("  </value>\r\n");
        builder.append("   

\r\n");
        builder.append(" 

\r\n");
        builder.append("</methodCall>\r\n");
        return builder.toString();
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007

Salut  !!!



Merci toujours pour l'interêt que tu portes à ma question.
J'ai testé la méthode du Buffer et j'ai toujours la même erreur à la ligne 21 c-à-d
la ligne Scanner scanner = new Scanner(connection.getInputStream());  c-à-d au moment de la récup de  InputStream().
j'ai même déplacé la recup de InputStream() mais dès kil rencontre la ligne là il renvoie tjrs la même erreur ....
voici le rapport de l'erreur  
---------------------rapport de l'erreur ------------
connection is opened
java.net.SocketException: Unexpected end of file from server
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:684)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:554)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:571)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:936)
        at Refill2.main(Refill2.java:21)
---------------------fin rapport --------------------------------
Peut -on contourner autrement ?? si non Merci beaucoup
Espérant te lire bientôt
Djito79
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
Salut,

je pense de plus en plus que ton problème est causé par la méthode "connection.setRequestMethod("POST")" en gros pour ecrire tu utilises POST ce qui est très bien mais pour la lecture tu le fais avec la méthode POST au lieu de GET ce qui doit poser problèmes sur ton serveur....

il faudrait que tu tests en passant en GET just avant de lire mais le problème est que tu dois fermer la connexion et ouvrir une nouvelle connexion pour switcher de méthode....

soit tu fais comme ça soit tu forges toi même tes requetes HTTP soit sans passer par HttpURLConnection... et c'est pas bien compliqué à mettre en place.... sinon je ne sais pas si il existe une autre solution (je n'ai jamais utilisé HttpURLConnection... généralement j'utilise une api que j'ai developpé pour faire des requetes HTTP(S) aussi bien en mode serveur qu'en mode client)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
10
Date d'inscription
jeudi 4 septembre 2003
Statut
Membre
Dernière intervention
31 août 2007

salut
Merci infiniment pour pour l'assistance..ça m'a fait un grand plaisir et je pense ke c'est comme cela que les informaticiens doivent s'entraider.
je vais faire des recherches pour voir si je peux developper un API pour faire ces requêtes.
Merci infiniment et à bientôt
Djito79
[mailto:anats79@yahoo.de anats79@yahoo.de]