Bonjour, j'essaie de lire et ecrire des données sur un socket malheuresement
impossible de lire les données sans boucler a l infini, je ne comprend pas
vraiement pourquoi mais le read() ne renvoie vraissemblablement jamais -1
donc la boucle ne s'arrete pas,
si vous pouviez m'aider
Merci d'avance
import java.io.*;
import java.net.*;
public class NewsTest {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
InputStreamReader in = null;
try {
echoSocket = new Socket("smtp.free.fr", 25);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new InputStreamReader(echoSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput= new String();
String output = new String();
int c =0;
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
julien
Bonjour, j'essaie de lire et ecrire des données sur un socket malheuresement impossible de lire les données sans boucler a l infini, je ne comprend pas vraiement pourquoi mais le read() ne renvoie vraissemblablement jamais -1 donc la boucle ne s'arrete pas,
si vous pouviez m'aider
Merci d'avance
import java.io.*; import java.net.*;
public class NewsTest { public static void main(String[] args) throws IOException {
Socket echoSocket = null; PrintWriter out = null; InputStreamReader in = null;
try { echoSocket = new Socket("smtp.free.fr", 25); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new InputStreamReader(echoSocket.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host: taranis."); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for " + "the connection to: taranis."); System.exit(1); }
BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in)); String userInput= new String(); String output = new String(); int c =0;
2 remarques : - pour comparer des String, on utilise la méthode .equals ou .equalsIgnoreCase pour ignorer la casse - il faudrait plutôt faire du multithread ici car sinon je ne vois pas comment on peut sortir de la 1ère boucle while
Bonjour, j'essaie de lire et ecrire des données sur un socket malheuresement
impossible de lire les données sans boucler a l infini, je ne comprend pas
vraiement pourquoi mais le read() ne renvoie vraissemblablement jamais -1
donc la boucle ne s'arrete pas,
si vous pouviez m'aider
Merci d'avance
import java.io.*;
import java.net.*;
public class NewsTest {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
InputStreamReader in = null;
try {
echoSocket = new Socket("smtp.free.fr", 25);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new InputStreamReader(echoSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput= new String();
String output = new String();
int c =0;
2 remarques :
- pour comparer des String, on utilise la méthode .equals ou
.equalsIgnoreCase pour ignorer la casse
- il faudrait plutôt faire du multithread ici car sinon je ne vois pas
comment on peut sortir de la 1ère boucle while
Bonjour, j'essaie de lire et ecrire des données sur un socket malheuresement impossible de lire les données sans boucler a l infini, je ne comprend pas vraiement pourquoi mais le read() ne renvoie vraissemblablement jamais -1 donc la boucle ne s'arrete pas,
si vous pouviez m'aider
Merci d'avance
import java.io.*; import java.net.*;
public class NewsTest { public static void main(String[] args) throws IOException {
Socket echoSocket = null; PrintWriter out = null; InputStreamReader in = null;
try { echoSocket = new Socket("smtp.free.fr", 25); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new InputStreamReader(echoSocket.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host: taranis."); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for " + "the connection to: taranis."); System.exit(1); }
BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in)); String userInput= new String(); String output = new String(); int c =0;
2 remarques : - pour comparer des String, on utilise la méthode .equals ou .equalsIgnoreCase pour ignorer la casse - il faudrait plutôt faire du multithread ici car sinon je ne vois pas comment on peut sortir de la 1ère boucle while
obere
Salut,
Le read() ne retournera -1 que lorsque la socket sera fermee a l'autre extremite de la connection.
Il faut donc que tu saches combien de caracteres tu dois lire sur la socket (soit via un caractere de fin de transmission, soit via un indicateur de longueur de transmission - nombre de caracteres envoyes).
Dans le cas du protocole SMTP (port 25), il me semble me rappeler que chaque commande / code de retour renvoye par le serveur est termine par une sequence <CRLF> (code Ascii 13, puis code Ascii 10). Verifie dans la RFC.
Au lieu de verifier que le dernier caractere lu vaut -1, il faut donc verifier que les deux derniers caracteres lus valent 13 et 10.
J'espere que ca t'aide. Hesites pas a demander + de details.
Salut,
Le read() ne retournera -1 que lorsque la socket sera fermee a l'autre
extremite de la connection.
Il faut donc que tu saches combien de caracteres tu dois lire sur la
socket (soit via un caractere de fin de transmission, soit via un
indicateur de longueur de transmission - nombre de caracteres envoyes).
Dans le cas du protocole SMTP (port 25), il me semble me rappeler que
chaque commande / code de retour renvoye par le serveur est termine par
une sequence <CRLF> (code Ascii 13, puis code Ascii 10). Verifie dans
la RFC.
Au lieu de verifier que le dernier caractere lu vaut -1, il faut donc
verifier que les deux derniers caracteres lus valent 13 et 10.
J'espere que ca t'aide. Hesites pas a demander + de details.
Le read() ne retournera -1 que lorsque la socket sera fermee a l'autre extremite de la connection.
Il faut donc que tu saches combien de caracteres tu dois lire sur la socket (soit via un caractere de fin de transmission, soit via un indicateur de longueur de transmission - nombre de caracteres envoyes).
Dans le cas du protocole SMTP (port 25), il me semble me rappeler que chaque commande / code de retour renvoye par le serveur est termine par une sequence <CRLF> (code Ascii 13, puis code Ascii 10). Verifie dans la RFC.
Au lieu de verifier que le dernier caractere lu vaut -1, il faut donc verifier que les deux derniers caracteres lus valent 13 et 10.
J'espere que ca t'aide. Hesites pas a demander + de details.