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

  FORUM HardWare.fr
  Programmation

  Probleme socket en JAVA / C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme socket en JAVA / C

n°28507
Klyr
Posté le 30-04-2001 à 13:45:33  profilanswer
 

J'ai fais un programme client Java qui se connecte à un serveur programmé en C  
 
Mon probleme est que desfois (aleatoirement)le serveur recoit seulement le premier caractere de la chaine envoyée.
 
En gros, desfois ca marche, d'autres fois ca marche pas.  
 
Voila le debut de mon code java :  
-----------------------------------------  
InetAddress adresse = InetAddress.getByName (serveur);  
Socket socket = new Socket (adresse, port);  
 
DataOutputStream fluxSortie=new DataOutputStream(socket.getOutputStream ());  
DataInputStream fluxEntree=new DataInputStream(socket.getInputStream());  
 
fluxSortie.writeBytes("ma chaine de caracteres" );  
-----------------------------------------  
 
En face, le serveur fait un simple :  
---------------------------------  
char *szBuffer = new char[1024];  
recv(sock, szBuffer, 1024, NULL); // avec la gestion des erreurs  
---------------------------------  
 
Si je regarde le contenu de szBuffer, desfois il y a seulement le premier caractere, desfois toute la chaine est là.  
S'il n'y a eu que le premier caractere de recu, on peut recevoir la suite du message avec un autre recv au niveau du serveur.  
 
Enfin, en mettant un Sleep(1000) juste avant le recv, le probleme ne se pose plus, cependant ce n'est pas une méthode tres elegante de resoudre ce probleme  
 
 
Voila, est-ce un bug de java ?  
Est-ce moi qui utilise mal les socket en java ?

mood
Publicité
Posté le 30-04-2001 à 13:45:33  profilanswer
 

n°28510
wouatouwou​atou
Posté le 30-04-2001 à 14:05:36  profilanswer
 

c donc un pb de synchronisation..  
tout est synchronized dans tes methodes de reception/envoi?


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°28517
Klyr
Posté le 30-04-2001 à 14:32:03  profilanswer
 

Oui, tout est synchronisé car c'est le premier message qui est envoyé/recu.
 
D'ailleurs je ne comprend meme pas comment le recv s'arrete (quand ca marche) à la fin de la chaine envoyée qui est < à 1024

n°28536
Amadeus
Posté le 30-04-2001 à 16:01:09  profilanswer
 

T'as essayé d'utiliser les sock non bloquantes ? J'ai fait dans une vie antérieure un petit serveur qui utilisait la fonct° WSAAsyncSelect avec les évènement FD_CONNECT, FD_READ, FD_WRITE et FD_CLOSE. Cela permet de communiquer de manière asynchrone -> transfert de fichiers, ...
Petite précision : cela n'est valable que sous windows alors si tu travaille sous un autre os il ya d'autres méthodes.

 

[edit]--Message édité par Amadeus--[/edit]

n°28550
Klyr
Posté le 30-04-2001 à 16:29:02  profilanswer
 

... .Dommage, c'est deja le Select qui est utilisé (WSAAsyncSelect) ....

n°28566
WiseTechi
Posté le 30-04-2001 à 17:33:12  profilanswer
 

Un truc peut-être bête :
 
un problème de caractère de fin de chaîne différent entre Java et C (\0) ????
 
A++

n°28613
246tNt
Resistance is futile
Posté le 30-04-2001 à 23:00:28  profilanswer
 

Ah mon avis, ce que tu devrait faire c si tu n'a pas recu la chaine complete, tu recommence un recv
 
C surement du au fait que java quand tu lui demande de faire qq chose, il le fait quand il a le temps et pas quand tu lui demande ...

n°28632
Klyr
Posté le 01-05-2001 à 12:05:20  profilanswer
 

Oui, c'est surement à cause du fait que c'est une sortie bufferisée, j'ai bien essayé flush() juste apres l'envoie mais ca ne change rien.
 
Y'a pas un moyen d'ecrire directement sans passer par un buffer ?

n°39066
Hrolf
Posté le 12-06-2001 à 14:47:41  profilanswer
 

Il faut pas envoyer des caracteres mais des bytes et la ca marche bien (prob de java c'etait pareil pour moi)

n°39155
therier
heu...coucou!
Posté le 12-06-2001 à 17:44:17  profilanswer
 

hrolf a raison, avec des bytes au lieu de String (DataOutputStream) ça marche (pb de caractères de terminaison != en C et Java je pense).


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

  Probleme socket en JAVA / C

 

Sujets relatifs
Probleme serveur IIS ?[PHP] problème type MIME pour upload
PHP: Problème Urgent[php] Probleme d'identification.....
[SQL] Probleme bateau ?[JAVA]
[JAVA] Changer les permissions d'un fichier ?[Java] BMP -> java.awt.Image
PB avec ''Forte For Java''video en Java
Plus de sujets relatifs à : Probleme socket en JAVA / C


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