Rechercher : dans
Par :

Socket client-serveur

Dernière réponse le 28 mai 2009 à 19:07:16 berth, le 19 mar 2009 à 21:38:32 
 Signaler ce message aux modérateurs

Sistaroro


Bonjour ,
j'ai un petit souci. Je souhaite que le serveur puisse récupérer alternativement les éléments produits par le client1 et le client2.J'arrive a récupérer les éléments d'un seul client a la fois en lancant le serveur et ensuite le client.Comment puis-je faire?Merci
Je met mon code.

/*############################Serveur#######################­##*/
import java.io.*;
import java.net.*;

public class Serveur {
static final int port = 8080;





public static void main(String[] args) throws Exception {
ServerSocket s = new ServerSocket(port);
Socket soc = s.accept();

// Un BufferedReader permet de lire par ligne.
BufferedReader plec1 = new BufferedReader(
new InputStreamReader(soc.getInputStream())
);

ClientC clientc=new ClientC();
clientc.start();

while (true) {
String str1 = plec1.readLine(); // lecture du message
System.out.println("RECU = " + str1); // trace locale

if (str1.equals("FIN")) break;
}
plec1.close();

soc.close();
}
}
/*############################################################################*/


/*########################Client 1################################*/

import java.io.*;
import java.net.*;
/** Le processus client se connecte au site fourni dans la commande
* d'appel en premier argument et utilise le port distant 8080.
*/
public class ClientL {
static final int port = 8080;

public static void main(String[] args)
{

}


public void start() throws Exception
{
char Tab[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
Socket socket = new Socket("127.0.0.1", port);
System.out.println("SOCKET = " + socket);

PrintWriter pred = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);


for (int i = 0; i < 26; i++) {
pred.println(Tab[i]); // envoi d'un message
}
System.out.println("FIN"); // message de terminaison
pred.println("FIN") ;
pred.close();
socket.close();

}
}

/*#########################################################################################*/

/*#####################Client 2 ################
import java.io.*;
import java.net.*;
/** Le processus client se connecte au site fourni dans la commande
* d'appel en premier argument et utilise le port distant 8080.
*/
public class ClientC {
static final int port = 8186;

public static void main(String[] args)
{

}

public void start()throws Exception
{

Socket socket = new Socket("127.0.0.1", port);
System.out.println("SOCKET = " + socket);

PrintWriter pred = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);


for (int i = 0; i < 26; i++) {
pred.println(i); // envoi d'un message
}
System.out.println("FIN"); // message de terminaison
pred.println("FIN") ;
pred.close();
socket.close();
}
}

/*########################################################*/

Configuration: Windows XP
Firefox 3.0.7

Meilleures réponses pour « Socket client serveur » dans :

1

Char Snipeur, le 19 mar 2009 à 22:26:01

Salut.
Je ne comprends pas bien ce que tu veux faire.
En plus tu lance le client depuis le serveur. C'est.... déroutant.
Si tu veux recevoir alternativement les messages de 2 clients, il faut attendre la connexion d'un premier client, attendre qu'il t'envoie un message, le récupérer. Ensuite, il faut attendre la demande de connexion du deuxième client.
Si tu veux conserver l'alternance, il ne faut pas faire de thread sinon tu risque d'avoir des receptions dans le désordre. Salutation ! (il faut bien que vous compreniez que j'ai TOUJOURS raison)
Char Snipeur

Répondre à Char Snipeur

2

berth, le 19 mar 2009 à 22:39:18
  • +2

Désolé j'avais modifié mes classes pour tester.Je renvoie.
En fait j'arrive a envoyer les éléments d'un seul client en même temps et j'aimerais savoir comment envoyer les 2 alternativement.Merci de ta réponse.


/*############################Serveur#######################­##*/
import java.io.*;
import java.net.*;

public class Serveur {
static final int port = 8080;





public static void main(String[] args) throws Exception {
ServerSocket s = new ServerSocket(port);
Socket soc = s.accept();

// Un BufferedReader permet de lire par ligne.
BufferedReader plec1 = new BufferedReader(
new InputStreamReader(soc.getInputStream())
);


while (true) {
String str1 = plec1.readLine(); // lecture du message
System.out.println("RECU = " + str1); // trace locale

if (str1.equals("FIN")) break;
}
plec1.close();

soc.close();
}
}
/*############################################################################*/


/*########################Client 1################################*/

import java.io.*;
import java.net.*;
/** Le processus client se connecte au site fourni dans la commande
* d'appel en premier argument et utilise le port distant 8080.
*/
public class ClientL {
static final int port = 8080;

public static void main(String[] args)
{
char Tab[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
Socket socket = new Socket("127.0.0.1", port);
System.out.println("SOCKET = " + socket);

PrintWriter pred = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);


for (int i = 0; i < 26; i++) {
pred.println(Tab[i]); // envoi d'un message
}
System.out.println("FIN"); // message de terminaison
pred.println("FIN") ;
pred.close();
socket.close();

}

}




/*#########################################################################################*/

/*#####################Client 2 ################
import java.io.*;
import java.net.*;
/** Le processus client se connecte au site fourni dans la commande
* d'appel en premier argument et utilise le port distant 8080.
*/
public class ClientC {
static final int port = 8186;

public static void main(String[] args) throws Exception
{

Socket socket = new Socket("127.0.0.1", port);
System.out.println("SOCKET = " + socket);

PrintWriter pred = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);


for (int i = 0; i < 26; i++) {
pred.println(i); // envoi d'un message
}
System.out.println("FIN"); // message de terminaison
pred.println("FIN") ;
pred.close();
socket.close();
}

}


/*########################################################*/

Répondre à berth

3

Char Snipeur, le 19 mar 2009 à 23:16:11

Il faut créer un deuxième socket dans le serveur.
En plus, tu utilise un autre port dans client2 ! Salutation ! (il faut bien que vous compreniez que j'ai TOUJOURS raison)
Char Snipeur

Répondre à Char Snipeur

4

berth, le 19 mar 2009 à 23:19:19

Oui je me suis trompée.Le port c'est 8080 pour les deux clients.Mais je crée un nouveau socket dans le serveur.Faut il aussi créer un nouveau Serversocket?

Répondre à berth

5

berth, le 19 mar 2009 à 23:20:20

Autre chose que je n'ai pas comprise.Comment lancer les 2 clients en meme temps?

Répondre à berth

6

berth, le 20 mar 2009 à 00:56:41

C'est bon.J'ai compris.Merci de ton aide

Répondre à berth

7

 kinou760, le 28 mai 2009 à 19:07:16

J ai 1 pbl dans le socket client ,le host es qu il est toujours 127.0.0.1
sinon si en veut connecté un serveur situer dans une différente machine quel es la valeur du host . sa sera un plaisir à moi de me répendre merci

Répondre à kinou760
Collection CommentÇaMarche.net