Socket client-serveur
berth
-
kinou760 Messages postés 1 Statut Membre -
kinou760 Messages postés 1 Statut Membre -
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();
}
}
/*########################################################*/
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();
}
}
/*########################################################*/
A voir également:
- Socket client-serveur
- Cybera client - Télécharger - Divers Réseau & Wi-Fi
- Changer serveur dns - Guide
- Filezilla client - Télécharger - Téléchargement & Transfert
- Formate pour taxer client 500€ - Forum PDF
- Numéro service client orange - Guide
5 réponses
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.
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.
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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();
}
}
/*########################################################*/