Read/Write sur un Socket

livier_silha Messages postés 2 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 23 août 2005 - 19 août 2005 à 14:57
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 28 août 2005 à 04:21
Supposons un client/serveur tout simple:

. le serveur étant basique, du genre:

ServerSocket server = new ServerSocket(10101);


Socket socket = serverSock.accept();


InputStream isServer = socket.getInputStream();

PrintWriter writerServer = new PrintWriter(socket.getOutputStream());

. le client tout aussi basique:

Socket client = new Socket("127.0.0.1", 10101);


InputStream isClient = client.getInputStream();

PrintWriter writerClient = new PrintWriter(client.getOutputStream());



Le "protocole" du système est le suivant

. le client envoye un string, genre "ABCDEF" au serveurr, puis il se met en lecture, en attente de la réponse du serveur:

writerClient.print("ABCDEF");

writerClient.flush();

int readClient = is.read();



. le serveur est par défaut en lecture, et dès qu'il reçoit quelle
chose, émet une réponse, ici il enverra successivement "A", "B"..."F"



Mon (mes) problème est que, avec ce listing:
writerClient.print("ABCDEF");

writerClient.flush();

int readClient = is.read();



Le serveur est toujours en attente.. comme si rien n'était transmis. Or en faisant la modification suivante:

writerClient.print("ABCDEF");

writerClient. close() ;

int readClient = is.read();



Du côté serveur j'ai bien mon message "ABCDEF" qui s'affiche, mais tout
de suite le client s'arrête avec une exception "Socket is closed", ce
qui vient du fait que lorsque j'ai fait close() sur le writerClient, ça
a libéré les ressources dont le socket...



Comment faire une communication dans les 2 sens en utilisant le même socket?



Merci de vos réponses.

1 réponse

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
28 août 2005 à 04:21
as tu verifie que tu recois bien les lettres au fur et a mesure?

a mon avis ton server doit etre sur read a la fin de la chaine et donc
en attente. si tu ferme le socket, alors il sort de la boucle, ce qui
pourrai expliquer qu'il taffiche la chaine.

moi j'essayerai un truc du genre

int readServer = isServer.read();

while (readServer != -1) {

System.out.println((char)readServer);

readServer = isServer.read();

}



je crois que javais eu un probleme similaire, et en rajoutant un retour a la ligne (\n) a la fin de la chaine, ca marchait.



PS: je pense que c juste une faute de frappe le is.read() a la place de isClient.read()
0
Rejoignez-nous