Copie de udpunicastclient

This commit is contained in:
Marino Benassai 2020-12-07 14:49:42 +01:00
parent d3b512b620
commit 3ebb86ea89
5 changed files with 88 additions and 35 deletions

View file

@ -7,41 +7,41 @@ import java.net.Socket;
import java.net.SocketAddress;
import java.util.ArrayList;
import nom.GestionnaireNom;
import reseau.*;
import ui.DiscussionUI;
public class gestionnaireClavardage implements Runnable{
public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999;
public static final int BACKLOG = 10;
private static gestionnaireClavardage uniqueInstance = null;
private ArrayList<sessionClavardage> sessions = new ArrayList<sessionClavardage>();
private TCPServer requestServer;
private long id;
private String host;
private Thread thread;
public static gestionnaireClavardage instance(long id, int backlog, String host) {
public static gestionnaireClavardage instance() {
if (uniqueInstance == null) {
uniqueInstance = new gestionnaireClavardage(id, backlog, host);
uniqueInstance = new gestionnaireClavardage(BACKLOG);
}
return gestionnaireClavardage.uniqueInstance;
}
//Ajouter la supppression des sessions de la liste après déconnexion
//Remplacer par un singleton
private gestionnaireClavardage(long id, int backlog, String host) {
this.id = id;
this.host = host;
this.requestServer = new TCPServer(this.host, backlog, PORT_REQUETE_NOUVELLE_SESSION + (int) id);
private gestionnaireClavardage(int backlog) {
GestionnaireNom gn = GestionnaireNom.instance();
this.requestServer = new TCPServer(gn.getIp(), backlog, PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.getId()));
this.thread = new Thread(this);
this.thread.start();
}
public void createSession(long id) {
TCPClient client = new TCPClient("localhost", PORT_REQUETE_NOUVELLE_SESSION + (int) id);
sessionClavardage session = new sessionClavardage(this.id, id, client, null);
public void createSession(String name) {
GestionnaireNom gn = GestionnaireNom.instance();
TCPClient client = new TCPClient(gn.ipFromNom(name), PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.idFromNom(name))) ;
sessionClavardage session = new sessionClavardage(gn.getId(), gn.idFromNom(name), client, null);
this.sessions.add(session);
client.send(Long.toString(this.id)+"\n");
System.out.print("Paramètres de session envoyée à " + id + "\n");
client.send(gn.getId()+"\n");
System.out.print("Paramètres de session envoyée à " + gn.idFromNom(name) + "\n");
//Lancement de la fenêtre de session
EventQueue.invokeLater(new Runnable() {
@ -74,14 +74,15 @@ public class gestionnaireClavardage implements Runnable{
public void run() {
GestionnaireNom gn = GestionnaireNom.instance();
while (true) {
Socket ssocket = this.requestServer.accept();
System.out.print("Données reçues sur le serveur de " + this.id + "\n");
System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n");
TCPServerThread client = new TCPServerThread(ssocket,false);
long idClient = -1;
String idClient = null;
try {
idClient = Long.parseLong(client.receive());
idClient = client.receive();
}
catch (IOException e) {
client.stop();
@ -90,18 +91,18 @@ public class gestionnaireClavardage implements Runnable{
Thread t = new Thread(client);
t.start();
int i = 0;
while (idClient>0 && i<this.sessions.size() && this.sessions.get(i).getIdDestination() != idClient) {
while (idClient != null && i<this.sessions.size() && this.sessions.get(i).getIdDestination() != idClient) {
i+=1;
}
if (idClient == -1);
if (idClient == null);
else if (i >= this.sessions.size()) {
//Il n'existe pas encore de session entre les deux utilisateurs
System.out.print("Nouvelle session sur le serveur de " + this.id + "\n");
TCPClient clientEnvoi = new TCPClient(client.getAdresseCible(), PORT_REQUETE_NOUVELLE_SESSION + (int) idClient);
sessionClavardage session = new sessionClavardage(this.id, idClient, clientEnvoi, client);
System.out.print("Nouvelle session sur le serveur de " + gn.getId() + "\n");
TCPClient clientEnvoi = new TCPClient(client.getAdresseCible(), PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(idClient));
sessionClavardage session = new sessionClavardage(gn.getId(), idClient, clientEnvoi, client);
this.sessions.add(session);
clientEnvoi.send(Long.toString(id)+"\n");
System.out.print("Fin de la configuration de " + this.id + "\n");
clientEnvoi.send(gn.getId()+"\n");
System.out.print("Fin de la configuration de " + gn.getId() + "\n");
//Lancement de la fenêtre de session
EventQueue.invokeLater(new Runnable() {
@ -116,15 +117,15 @@ public class gestionnaireClavardage implements Runnable{
});
}
else if (this.sessions.get(i).getClientReception() == null) {
System.out.print("Suite de la configuration sur le serveur de " + this.id + "\n");
System.out.print("Suite de la configuration sur le serveur de " + gn.getId() + "\n");
//il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée
this.sessions.get(i).setClientReception(client);
System.out.print("Fin de la configuration de " + this.id + "\n");
System.out.print("Fin de la configuration de " + gn.getId() + "\n");
}
else {
//Il existe déjà une connexion établie entre les deux machines
System.out.print("Tentative de session multiple sur le serveur de " + this.id + "\n");
System.out.print("Tentative de session multiple sur le serveur de " + gn.getId() + "\n");
client.stop();
}

View file

@ -2,19 +2,19 @@ package clavardage;
import reseau.*;
public class sessionClavardage {
private long idSource = 0;
private long idDestination = 0;
private String idSource = null;
private String idDestination = null;
private TCPClient clientEmission = null;
private TCPClient clientReception = null;
public sessionClavardage(long idSource, long idDestination, TCPClient clientEmission, TCPClient clientReception) {
public sessionClavardage(String idSource, String idDestination, TCPClient clientEmission, TCPClient clientReception) {
this.idSource = idSource;
this.idDestination = idDestination;
this.clientEmission = clientEmission;
this.clientReception = clientReception;
}
public sessionClavardage(long idSource, long idDestination, TCPClient clientReception) {
public sessionClavardage(String idSource, String idDestination, TCPClient clientReception) {
this.idSource = idSource;
this.idDestination = idDestination;
this.clientReception = clientReception;
@ -35,11 +35,11 @@ public class sessionClavardage {
+ ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + "\n";
}
public long getIdSource() {
public String getIdSource() {
return this.idSource;
}
public long getIdDestination() {
public String getIdDestination() {
return this.idDestination;
}

View file

@ -3,6 +3,7 @@ package clavardage;
import java.awt.EventQueue;
import java.util.ArrayList;
import nom.GestionnaireNom;
import ui.DiscussionUI;
public class test {
@ -46,9 +47,12 @@ public class test {
}
*/
public static void main(String[] args) {
gestionnaireClavardage gc = gestionnaireClavardage.instance(11, 5, "localhost");
gc.createSession(10);
GestionnaireNom gn = GestionnaireNom.instance();
gn.setId("11");
gn.setIp("localhost");
gn.setNom("User2");
gestionnaireClavardage gc = gestionnaireClavardage.instance();
gc.createSession("User1");
}

View file

@ -0,0 +1,47 @@
package liste;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.UnknownHostException;
public class UdpUnicastClient2 implements Runnable{
private final int serverPort;
private final String serverIP;
public UdpUnicastClient2(int serverPort, String serverIP) {
this.serverPort = serverPort;
this.serverIP = serverIP;
}
public void run() {
try(DatagramSocket serverSocket = new DatagramSocket()){
//for (int i = 0; i<3; i++) {
String message = "add$$$" + 77 + "$$$Roger$$$LocalHost"; //ordre$$$id$$$nom$$$ip
DatagramPacket datagramPacket = new DatagramPacket(
message.getBytes(),
message.length(),
InetAddress.getByName(serverIP),
serverPort
);
serverSocket.send(datagramPacket);
//}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View file

@ -31,6 +31,7 @@ public class TCPClient {
System.out.print("Could not find host\n");
}
catch (IOException e) {
System.out.print("port= "+port+" host= "+host+"\n");
System.out.print("Could not create socket\n");
}
this.adresseCible = socket.getInetAddress();