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

 


Dernière réponse
Sujet : Probleme socket en JAVA / C
therier 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).

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
therier 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).
Hrolf Il faut pas envoyer des caracteres mais des bytes et la ca marche bien (prob de java c'etait pareil pour moi)
Klyr 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 ?
246tNt 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 ...
WiseTechi 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++
Klyr ... .Dommage, c'est deja le Select qui est utilisé (WSAAsyncSelect) ....
Amadeus 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]

Klyr 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
wouatouwouatou c donc un pb de synchronisation..  
tout est synchronized dans tes methodes de reception/envoi?
Klyr 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 ?

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