JAVA : probleme dans réception paquet ip

Fermé
biba - 20 déc. 2011 à 12:25
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 20 déc. 2011 à 14:18
Bonjour,

je suis entrain de faire un système de chat avec java, la phase d'authentification marche nickel, ainsi que l'envoie du message. seulement voilà le message n'est pas réceptionné car le récepteur n'arrive pas à l'identifier comme un message texte et donc à effectuer les taches qui s'en suivent si l'identification est positive. je en sais plus ou donner de la tête car à l'envoie j'ai mis des tests et le paquet envoyé est bien du type message texte.

avez-vous déjà eu un problème de ce genre ou auriez-vous tout simplement une idée de sur pourquoi ça ne marche pas .

merci d'avance!!!
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 déc. 2011 à 13:07
On ne va pas te donner tout ce qui pourrait éventuellement faire que ça ne marche pas, montre nous ton code, que l'on puisse tester, et on te dira pourquoi ça coince.
0
effectivement, mais il se trouve que mon code depend de plusieurs packages sans lesqueles il sera imp de le tester, je vais donc chnger ma question : je pense que rien n'est receptionné car le methode receive du socket est blocante mais normalement ça se débloque dès la reception d'un datagramme mais là il se trouve que non et pourtant le paquet est bien envoyé et ça j'en suis sure et certaine car j'ai fait une tonne de tests pour m'en assurer; saurais-tu donc comment faire pour débloquer le socket...faut t-il utiliser les threads. Je mélange peut etre les pinceaux mais voilà ça ne fait pas longtemps que j'ai commencé dans la programmation de sockets...merci!
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 déc. 2011 à 13:21
Il y a quelques temps il y a eu deux posts avec le même problème, la lecture se faisait par readLine, alors que l'écriture était write (au lieu de writeLine). C'est peut-être ce genre d'étourderie qui te pose problème, mais des erreurs bêtes comme ça il y en a des tas !
Si tu as un gros projet, effectivement ce n'est pas la peine de tout nous donner, mais au moins les méthodes d'envoi et de réception là où ça se passe mal (en expliquant bien pour qu'on puisse comprendre même sans le reste du code)
0


//methode d'envoie du message
public void onSendMessage(){
TextMessage txtmsg= null;
MessageTexte msg=null;
int i;

try {
//recuperation du message depuis la zone ou ça a été tapée
msg= new MessageTexte(controller.getGui().getWriteZone().getText());
txtmsg = new TextMessage (msg);
controller.remoteUserselected();

//boucle pour recuperer tous les destinataires choisis pour chatter

for(i=0;i<controller.getRemoteip().size();i++){

//creation du datagramme à envoyer dans le rzo

DatagramPacket packet =new DatagramPacket(txtmsg.toBytesArray().toByteArray(),txtmsg.toBytesArray().size(),controller.getRemoteip().get(i),this.port_distant);

//ce qui suit c'est des tests qui m'ont permis de bien verifier que j'envoyer un message texte à la bonne adresse et su rle bon port

//System.out.println(controller.getRemoteip().get(i));
//System.out.println(this.port_distant);
//if (Signaux.toSignal(packet) instanceof TextMessage)
//System.out.println("ok its a text message");
//envoi du paquet
this.sendDatagramSocket(packet);

}

}
catch (UniformedMessage e) {
System.out.println("Erreur dans la recuperation du message");
}



//methode de reception du message

public void receiveDatagramSocket(){

//recuperation du message reçu
DatagramPacket packetreceive = new DatagramPacket(bufreceive,bufreceive.length);
try {
//reception sur le socket distant
this.socket.receive(packetreceive);
//j'ai mis cette ligne pour tester que effectivement le cosket rete bloqué car le code m'affiche "un paquet reçu" au moment ou j'envoie le hello qui est le message de szlutation quand tu viens de te connecter mais quand je clique sur send plus rien n'est printé sur l'ecran

System.out.println("un paquet reçu");
this.returnTypeOfSignal(packetreceive);
//treatmentDatagram() indique les taches à effectuer selon le type de signal reçu hello(connexion) goodbye(deconnexion) et textMessage
controller.treatmentDatagram();

}
catch (IOException e) {
System.out.println("Erreur dans la reception du paquet");
}

}




***********************voilà si jamais t'as des questions n'hésite pas car je reste devant le pc merci********************
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 déc. 2011 à 13:52
Est-ce que tu pourrais mettre les constructeurs de tes sockets, c'est à dire "this" pour onSendMessage, et "this.socket" pour receiveDatagramSocket.
De plus quelle taille fait bufreceive ? Et es-tu certain que cette taille est supérieure à txtmsg.toBytesArray().size() ? D'ailleurs il vient d'où ce toBytesArray() ? Est-ce que tu es sûr que cela correspond bien à un tableau de byte comme on le fait avec getBytes ?
0
dans onSendMesage le this c'est pas pour le socket mais pour la classe chatNi dans laquelle se trouve le methode onSendMassage, toutefois je crée mon socket de la façon suivante :



public void openSocket(){
try {
adress = InetAddress.getLocalHost();
socket = new DatagramSocket(this.port_local,adress);
}
catch(UnknownHostException e1){
System.out.println("Erreur adresse");
}
catch(SocketException e2){
System.out.println("Erreur dans le bind");
}
}


et la taille du buffer c'est pas bien grave car si le message est longer than la taille il est tout simplement tronqué...tcp quoi!
pour ce qui est de toBytesArray() tkt je l'ai déjàs testé pour l'enoie du hello et ça marche wellou....
j'espere que j'ai répondu à ta quetion :)!
0