Jiner
Messages postés4Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 3 mars 2008
-
3 mars 2008 à 10:55
Jiner
Messages postés4Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 3 mars 2008
-
3 mars 2008 à 13:20
Je suis en train de dévelloper un logiciel devant communiquer avec un autre par TCP sur une même machine. J'ai donc dévellopé deux clients, l'un envoyant des informations sur une socket branché au port 6020 et l'autre recevant des informations par le biais de la même socket. Bien sur vous me dirait que cela paraît abérent de créer deux clients pour cela, mais sans rentrer dans les détails je développe un systeme Sma ne me permettant pas cela. Mon problème est que je n'ai pas le logiciel avec lequel je doit communiquer, mais un simple serveur me permettant de recevoir et de renvoyer les fluxs me suffirait pour l'instant. Est ce que quelq'un aurai le code d'un serveur sous la main me permettant de faire ce que je désire.
Merci.
Jiner
Messages postés4Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 3 mars 2008 3 mars 2008 à 13:20
Merci j'ai finit par trouvé un serveur fonctionnant mais malheureusement le problème vient de ce que j'ai développé. Maintenant il me faut cerner le problème. J'ai l'impression que sa vient d'un problème de synchronistaion du client qui vient chercher le message et celui qui en envoi un.
Je met au cas ou mes classes clients si quelqun y voit le problème qui reste obscure pour moi.
Client pour la reception de message en provenance du serveur
public class B_Envoi_MessSma extends CyclicBehaviour
{
private static final long serialVersionUID = 1L;
Socket sockcli=null;
DataInputStream in;
int Port=6020;
public B_Envoi_MessSma(Agent a) throws IOException
{
super(a);//Création d'une action cyclic
}
public void action() //définition de l'action à réaliser
{
{
String mess=null;
if (connexion()==0)//lorsque la connection est faites on lit le flux en entrée
{
try {in=new DataInputStream(sockcli.getInputStream());}
catch (IOException e) {e.printStackTrace();}
mess=reçoit();
}
if (mess != null)
{
System.out.println("Lucy m'informe que l'action"+mess+"est finit");
}
}
}
private int connexion()
{ String url = "127.0.0.1";
try
{
if (url.equals("Stop"))return 1;//deconnexion si l'on entre la valeur stop au lieu d'une adresse
sockcli = new Socket (url, Port); //connexion au port 6020
System.out.println("Conexion etablie pour la reception");
return 0;//0="connection etablie"
}
catch (IOException ex)//si la connexion ne s'établie pas la fenetre client renvoi ce message
{ System.out.println("erreur debut client pour reception" + ex); return -1; }//0 pas de connection
}
public String reçoit ()
{
boolean boucle=true;
String mess=null;//message a transmettre initialisé a null*/
while(boucle)
{
try {mess=Flux.lecture(in);}//reception du flux en entrée
catch (IOException e) {e.printStackTrace();}
if (mess!=null)
{
boucle=false;
}
}
System.out.println("Je reçoit ce message: "+mess);//affichage en console du message reçu
return mess;
}
}
Client pour l'envoi de message :
public
class B_Attente_MessSma
extends CyclicBehaviour
{
//private static final MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);
private
static
final
long
serialVersionUID
= 1L;Socket
sockcli
=
null
;DataOutputStream
out
;
int
Port
=6020;
public
B_Attente_MessSma(Agent a)
throws
IOException{
super
(a);}
public
void
action() {
{
ACLMessage oMessage =
myAgent
.receive();
//reception interne d'un message à envoyer
String mess=
""
;
if
(oMessage !=
null
)
//partie permettant de formatter la chaine de caractère pour l'envoi