Programmation client/serveur

most27 - Modifié par jordane45 le 29/10/2014 à 18:55
KX Messages postés 16602 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 3 octobre 2022 - 30 oct. 2014 à 08:00
Bonjour,

Je débute avec la programmation en Java ,
j'écris mes codes sous Notepad et je les exécute avec l'invite de commande.
En ce moment je débute avec la programmation Client/Serveur UDP et voici mes programmes:

Le programme Client:
import java.net.*;
import java.io.*;
public class UDPClienth {
public static void main(String[] args)
{

DatagramSocket asochet=null;
try
{
asochet=new DatagramSocket();
byte[] m=args[0].getBytes();
InetAddress ahost=InetAddress.getByName(args[1]);
int serverPort=6789;

DatagramPacket request= new DatagramPacket(m,args[0].length,ahost,serverPort);
asochet.send(request);
byte[] buffer=new byte[1000];
DatagramPacket reply=new DatagramPacket(buffer,buffer.length);
asochet.receive(reply);

System.out.println("Reply"+new String (reply.getData()));
} 
catch(IOException e)
{
System.out.println("ID"+e.getMessage());
}

catch(Exception e)
{
System.out.println("Sochet"+e.getMessage());
}
finally
{
if(asochet!=null)
asochet.close();
}
}
}


Le programme Serveur:
import java.net.* ;
import java.io.* ;
public class UDPServerh {
public static void main(String[] args)
{
DatagramSocket asochet=null;

try
{
asochet=new DatagramSocket(6789);
byte[] buffer=new byte[1000];
while(true)
{
DatagramPacket request=new DatagramPacket(buffer,buffer.length);
asochet.receive(request);
int port=request.getPort();
InetAddress address=request.getAddress();
DatagramPacket reply=new DatagramPacket(buffer,buffer.length,address,port);
asochet.send(reply);
}
}

catch(IOException e)
{
System.out.println("ID"+e.getMessage());
}

catch(Exception e)
{
System.out.println("sochet"+e.getMessage());
}



finallyr 
{
if(asochet==null)
asochet.close();
}
}
}

et quand j'exécute le programme client j'ai une erreur .
j'ai vraiment pas compris :( j'aimerai bien avoir la commande qui me permet d'envoyer des messages au serveur et comment confirmer que le message a bien été reçu par le serveur c'est vraiment urgent .
Je vous remercie d'avance pour votre aide :)


EDIT : correction des balises de code (et de quelques fautes d'orthographe ^^ )

4 réponses

jordane45 Messages postés 36375 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2022 347
29 oct. 2014 à 18:53
Bonjour,


j'écrit mes codes sous Notepad

Je te conseille quand même d'utiliser mieux que le notepad...
A la limite.. Notepad++ ... ou sinon passer sur un "vrai" EDI (comme Eclipse ou NetBeans).
Déjà.. ça te permettra d'avoir la coloration syntaxique (ce qui permet d'éviter quelques erreurs).



et quand j'exécute le programme client j'ai une erreur .


Sans nous donner ton message d'erreur ( COMPLET ) il nous sera impossible de t'aider.
0
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016
Modifié par most27 le 29/10/2014 à 23:21
Pardon pour les fautes d'orthographe ^^
voici l'erreur

C:\Users\bureau\Desktop\java>javac UDPClienth.java
UDPClienth.java:15: error: cannot find symbol
DatagramPacket request= new DatagramPacket(m,args[0].length,ahost,serverPort);
^
symbol: variable length
location: class String
1 error<code>

</code>
et encore merci pour votre aide :)
0
jordane45 Messages postés 36375 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2022 347
30 oct. 2014 à 01:02
Donc ton message d'erreur t'indique que ton souci se trouve dans ton fichier UDPClienth
Que l'erreur est visiblement sur la ligne 15..
donc sur la ligne de code :

DatagramPacket request= new DatagramPacket(m,args[0].length,ahost,serverPort);


Es tu sûr que les variables que tu passes en paramètre sont bonnes ?
Tu devrais les afficher pour voir....

Et au cas où, peux tu essayer de remplacer ton
args[0].length
par une variable de type INT (c'est ce qu'attend le constructeur).

try {
	asochet=new DatagramSocket();
	byte[] m=args[0].getBytes();
	InetAddress ahost=InetAddress.getByName(args[1]);
	int serverPort=6789;
	int argLength = args[0].length;
	DatagramPacket request= new DatagramPacket(m,argLength,ahost,serverPort);
	asochet.send(request);
	byte[] buffer=new byte[1000];
	DatagramPacket reply=new DatagramPacket(buffer,buffer.length);
	asochet.receive(reply);

	System.out.println("Reply"+new String (reply.getData()));

} catch(IOException e) {
	System.out.println("ID"+e.getMessage());
}




0
KX Messages postés 16602 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 3 octobre 2022 124
30 oct. 2014 à 08:00
Bonjour,

"quand j'exécute le programme client j'ai une erreur"
Ce n'est pas une erreur d'exécution que tu as, mais une erreur de compilation !

Et comme Java est gentil il te dit où est l'erreur :

args[0].length
^
symbol: variable length
location: class String

args[0] est un String (vu que args est un String[]) et tu appelles une variable length qui n'existe pas (contrairement aux tableaux par exemple)
Ce qu'il fallait mettre ici, c'est la méthode length(), avec des parenthèses pour bien marquer que tu appelles la méthode sans argument.

DatagramPacket request= new DatagramPacket(m,args[0].length(),ahost,serverPort);

Connaître la taille d'un String c'est un peu la base du Java...
0