Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1704 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  probleme de socket (communication client/serveur)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de socket (communication client/serveur)

n°271728
Slash-
Posté le 17-12-2002 à 19:02:56  profilanswer
 

Salut,
 
j'ai un probleme, j'utilise des socket pour communiquer, la premiere communication se passe bien (login et password), ensuite la deuxieme communication coince, la socket lis bien les bytes, mais veut continuer a lire alors qu'il y a plus rien (et j'ai fais ca dans un try catch (EOFException))
 
client :
 

Code :
  1. // phase de login
  2. cliSock = new Socket(host,8256);
  3.                 System.err.println(cliSock.getInetAddress().toString());
  4.                 dos = new DataOutputStream(cliSock.getOutputStream());
  5.                 dis = new DataInputStream(cliSock.getInputStream());
  6. dos.writeUTF(login);
  7. dos.flush();
  8. String reponse = dis.readUTF();
  9. // deuxieme phase (envoie de texte) c'est a partir d'ici que ca foire
  10. dos.write(texte); //texte est un tableau de byte
  11. dos.flush();


 
le server :  
 

Code :
  1. SocketEcoute = new ServerSocket(PortEcouteUrg);
  2. SocketService = SocketEcoute.accept();
  3.          
  4. dis = new DataInputStream(new BufferedInputStream(SocketService.getInputStream()));
  5. dos = new DataOutputStream(new BufferedOutputStream(SocketService.getOutputStream()));
  6.            
  7. String login = dis.readUTF();
  8. dos.writeUTF(reponse);
  9. dos.flush();
  10. // jusqu'ici tout est ok
  11. // ici ca foire, ca lis les bytes envoyes puis quand yen a plus, ca ne passe pas dans l'exception, comme si il y avait des bytes "fantomes"...
  12. try
  13. {
  14.   while (true)
  15.   {
  16.         byte b;
  17.         b = dis.readByte();
  18.    }
  19. }
  20. catch (EOFException e)
  21. {
  22. ...
  23. }


 
si quelqu'un peut m'aider, ca me serait bien utile, merci

mood
Publicité
Posté le 17-12-2002 à 19:02:56  profilanswer
 

n°271767
benou
Posté le 17-12-2002 à 19:50:23  profilanswer
 

attebd, quand tu fais read, il se met en attente d'éléments à lire. Donc si tu lui envoie plus rien, c'est normal que ca bloque. Je vois pas pourquoi une exception serait générée ...
 
Si tu veux dire au serveur d'arrêter de lire, il faut soit que tu fermes la socket (là une exception sera générée sur le serveur), soit que tu définisses dans ton protocole réseau un message "stop" qui dira au serveur d'arrêter de lire.

n°271770
Slash-
Posté le 17-12-2002 à 19:57:21  profilanswer
 

cette exception est generee quand ya plus de byte a lire, c'est fait expres!!! la suite du code se trouvera dans le catch
et je ne sais pas combien de byte je vais lire car le message est crypte, donc oblige de faire comme ca...
 
public class EOFException
extends IOException
Signals that an end of file or end of stream has been reached unexpectedly during input.  
 
This exception is mainly used by data input streams to signal end of stream. Note that many other input operations return a special value on end of stream rather than throwing an exception.


Message édité par Slash- le 17-12-2002 à 19:58:23
n°271773
benou
Posté le 17-12-2002 à 19:59:23  profilanswer
 

:pfff:  
et quand est-ce qu'il y a plus de byte à lire ????
ben quand tu fermes la socket !
 
comment veux tu que le serveur sache que le client a finit d'envoyer ses données sinon ?  :sarcastic:

n°271777
HappyHarry
Posté le 17-12-2002 à 20:05:28  profilanswer
 

ton appli server ne sert qu'un seul client ?

n°271778
benou
Posté le 17-12-2002 à 20:08:51  profilanswer
 

HappyHarry a écrit :

ton appli server ne sert qu'un seul client ?


je crois que le serveur multi-threadé ce sera dans une 2e étape ... ;)

n°271780
HappyHarry
Posté le 17-12-2002 à 20:09:59  profilanswer
 

benou a écrit :


je crois que le serveur multi-threadé ce sera dans une 2e étape ... ;)


 
;)

n°271812
nraynaud
lol
Posté le 17-12-2002 à 21:06:13  profilanswer
 

Slash- a écrit :

Salut,
 
j'ai un probleme, j'utilise des socket pour communiquer, la premiere communication se passe bien (login et password), ensuite la deuxieme communication coince, la socket lis bien les bytes, mais veut continuer a lire alors qu'il y a plus rien (et j'ai fais ca dans un try catch (EOFException))
 
 


 
C'est un problème de BSD (enfin d'OS quoi), tu as le fonctionnement par défaut des socket, le mode bloquant. Tu peux la passer en mode non bloquant et là ça aura le comportement que tu veux.
 
Tiens, j'ai trouvé :  
http://java.sun.com/j2se/1.4.1/doc [...] Blocking()
 
ServerSocket.getChannel().configureBlocking(false);
 
ou un truc du genre.
 
 

n°271820
Slash-
Posté le 17-12-2002 à 21:24:01  profilanswer
 

bon c'est vrai que ca fonctionne si je ferme la socket, mais si je dois faire une autre communication apres, je dois reouvrir une socket alors ...
 
ya pas une methode qui pourrait lire d'un flux (dataouputstream dans mon cas) des bytes mais sans savoir combien de bytes doivent etre lus?
 
ps : qu'un seul client oui, pas de multithread pour le moment en tout cas ;)


Message édité par Slash- le 17-12-2002 à 21:24:49
n°271832
benou
Posté le 17-12-2002 à 21:44:37  profilanswer
 

comme je te dis depuis tout à l'heure, il faut que tu te créée un protocole réseau !
il faut que tu définisses la forme des donénes qui seront échangés entre ton client et ton serveur pour que chacun sache comment réagir aux données qu'il reçoit.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  probleme de socket (communication client/serveur)

 

Sujets relatifs
[Fortran] [Matlab] Problème de compilationJ'ai un problème avec les WinThread
[C] Ptit problème de newbi [OK]probleme en c
probleme sujet programation excel........helpprobleme de string
probleme de hierarchie de classes et copie profonde. [urgent]Problème sur un devoir en assembleur [Help : c'est pas simple <:'o( ]
question bete : probleme dans la déclaration d'un tableauCommunication Inter Processus
Plus de sujets relatifs à : probleme de socket (communication client/serveur)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR