Commentaires + README

This commit is contained in:
Lucàs
2022-12-07 10:51:28 +01:00
parent 8fb03bf6f9
commit 938969078e
5 changed files with 129 additions and 206 deletions
+7 -150
View File
@@ -2,27 +2,13 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" name="Changes" comment=""> <list default="true" id="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/.idea/intellij-javadocs-4.0.1.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/uiDesigner.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/ListenThread.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/ListenThread.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/client/ListenThread.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/ListenThread.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/Server.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/Server.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/ThreadServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ThreadServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreClient.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/ui/FenetreClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreClient.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreErreur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreErreur.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreServeur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreServeur.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/utils/AES.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/AES.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/utils/RSA.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/RSA.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/utils/ResolutionDeNom.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/ResolutionDeNom.java" afterDir="false" />
</list>
<list id="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" name="Changes by burgu" comment="">
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/ListenThread.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/ListenThread.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/Server.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/Server.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/ThreadServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ThreadServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreServeur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreServeur.java" afterDir="false" />
</list> </list>
<list id="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" name="Changes by burgu" comment="" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -40,92 +26,6 @@
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="LineStatusTrackerManager">
<file path="$PROJECT_DIR$/src/client/ListenThread.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="10" end1="11" start2="16" end2="21" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="14" end1="14" start2="24" end2="25" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="15" end1="15" start2="26" end2="28" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="17" end1="17" start2="30" end2="35" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="22" end1="22" start2="40" end2="46" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="47" end1="48" start2="71" end2="72" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/server/Server.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="8" end1="9" start2="14" end2="22" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="10" end1="10" start2="23" end2="26" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="11" end1="11" start2="27" end2="31" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="12" end1="12" start2="32" end2="36" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="14" end1="14" start2="38" end2="43" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="17" end1="18" start2="46" end2="46" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="21" end1="21" start2="49" end2="55" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="35" end1="36" start2="69" end2="70" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="37" end1="37" start2="71" end2="72" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="39" end1="40" start2="74" end2="75" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="41" end1="41" start2="76" end2="77" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="42" end1="43" start2="78" end2="78" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="50" end1="55" start2="85" end2="85" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/client/Client.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="7" end1="8" start2="13" end2="13" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="20" end1="20" start2="25" end2="33" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="22" end1="22" start2="35" end2="36" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="26" end1="26" start2="40" end2="42" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="28" end1="30" start2="44" end2="44" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="31" end1="31" start2="45" end2="46" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="36" end1="36" start2="51" end2="69" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="48" end1="48" start2="81" end2="88" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="105" end1="105" start2="145" end2="150" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="113" end1="113" start2="158" end2="163" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="118" end1="118" start2="168" end2="174" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="125" end1="126" start2="181" end2="182" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/ui/FenetreServeur.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="5" end1="5" start2="11" end2="12" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="6" end1="6" start2="13" end2="20" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="12" end1="12" start2="26" end2="30" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="14" end1="14" start2="32" end2="35" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="18" end1="18" start2="39" end2="40" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="19" end1="19" start2="41" end2="43" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="20" end1="20" start2="44" end2="45" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="27" end1="27" start2="52" end2="55" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="29" end1="29" start2="57" end2="59" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="32" end1="32" start2="62" end2="63" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="36" end1="36" start2="67" end2="72" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="38" end1="39" start2="74" end2="75" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="45" end1="45" start2="81" end2="86" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/server/ThreadServer.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="12" end1="12" start2="18" end2="26" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="15" end1="15" start2="29" end2="32" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="16" end1="16" start2="33" end2="37" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="17" end1="17" start2="38" end2="42" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="18" end1="18" start2="43" end2="47" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="19" end1="19" start2="48" end2="53" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="20" end1="21" start2="54" end2="58" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="23" end1="23" start2="60" end2="67" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="32" end1="32" start2="76" end2="84" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="72" end1="72" start2="124" end2="130" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="80" end1="80" start2="138" end2="146" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="85" end1="85" start2="151" end2="158" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="88" end1="90" start2="161" end2="166" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="92" end1="92" start2="168" end2="175" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="96" end1="98" start2="179" end2="184" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
</ranges>
</file>
</component>
<component name="MarkdownSettingsMigration"> <component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" /> <option name="stateVersion" value="1" />
</component> </component>
@@ -152,6 +52,7 @@
"com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrarySuperClass.JUnit5": "", "com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrarySuperClass.JUnit5": "",
"create.test.in.the.same.root": "true", "create.test.in.the.same.root": "true",
"last_opened_file_path": "/Users/lucas/Documents/GitHub/projet-mini-chat/src/serveur", "last_opened_file_path": "/Users/lucas/Documents/GitHub/projet-mini-chat/src/serveur",
"nodejs_package_manager_path": "npm",
"project.structure.last.edited": "Modules", "project.structure.last.edited": "Modules",
"project.structure.proportion": "0.15", "project.structure.proportion": "0.15",
"project.structure.side.proportion": "0.2", "project.structure.side.proportion": "0.2",
@@ -173,33 +74,7 @@
<recent name="utils" /> <recent name="utils" />
</key> </key>
</component> </component>
<component name="RunManager" selected="Application.Server"> <component name="RunManager" selected="Application.ui.FenetreClient">
<configuration name="App" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ui.App" />
<module name="projet-mini-chat" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="ui.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="Client" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="client.Client" />
<module name="projet-mini-chat" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="client.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="FenetreServeur" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <configuration name="FenetreServeur" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ui.FenetreServeur" /> <option name="MAIN_CLASS_NAME" value="ui.FenetreServeur" />
<module name="projet-mini-chat" /> <module name="projet-mini-chat" />
@@ -213,19 +88,6 @@
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
<configuration name="Server" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="server.Server" />
<module name="projet-mini-chat" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="server.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="ui.FenetreClient (1)" type="Application" factoryName="Application" nameIsGenerated="true"> <configuration name="ui.FenetreClient (1)" type="Application" factoryName="Application" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ui.FenetreClient" /> <option name="MAIN_CLASS_NAME" value="ui.FenetreClient" />
<module name="projet-mini-chat" /> <module name="projet-mini-chat" />
@@ -254,19 +116,13 @@
</configuration> </configuration>
<list> <list>
<item itemvalue="Application.ui.FenetreClient (1)" /> <item itemvalue="Application.ui.FenetreClient (1)" />
<item itemvalue="Application.App" />
<item itemvalue="Application.Client" />
<item itemvalue="Application.FenetreServeur" /> <item itemvalue="Application.FenetreServeur" />
<item itemvalue="Application.ui.FenetreClient" /> <item itemvalue="Application.ui.FenetreClient" />
<item itemvalue="Application.Server" />
</list> </list>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Application.Server" />
<item itemvalue="Application.App" />
<item itemvalue="Application.FenetreServeur" />
<item itemvalue="Application.ui.FenetreClient" /> <item itemvalue="Application.ui.FenetreClient" />
<item itemvalue="Application.Client" /> <item itemvalue="Application.FenetreServeur" />
</list> </list>
</recent_temporary> </recent_temporary>
</component> </component>
@@ -282,7 +138,8 @@
<workItem from="1669119772164" duration="6834000" /> <workItem from="1669119772164" duration="6834000" />
<workItem from="1669724625302" duration="6630000" /> <workItem from="1669724625302" duration="6630000" />
<workItem from="1670230395395" duration="19588000" /> <workItem from="1670230395395" duration="19588000" />
<workItem from="1670329829454" duration="6293000" /> <workItem from="1670329829454" duration="6520000" />
<workItem from="1670405222370" duration="1434000" />
</task> </task>
<servers /> <servers />
</component> </component>
+18 -12
View File
@@ -1,16 +1,22 @@
# Question 6 <h1 align="center">Projet Mini Chat</h1>
<p>
<img alt="Version" src="https://img.shields.io/badge/version-1.0-blue.svg?cacheSeconds=2592000" />
</p>
## Avant la communication > Projet de réseau, semestre 5 Licence Informatique 2022-2023 à l'INU Champollion.
Utiliser le RSA, avant toute communication.
Le client et le server génèrent 2 clés (une publique et une privées)
Ils s'échangent leurs clé publiques.
![img](https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Asymmetric_cryptography_-_step_1.svg/800px-Asymmetric_cryptography_-_step_1.svg.png) ## Auteurs
## Pendant la communication 👤 **Gaël BURGUÈS**
Lors qu'un utilisateur veut envoyer un message, il crypte son
message avec la clé pulique de son interlocuteur et lui envoie.
La personne qui reçois le message, le décrypte le message avec
sa propre clé privée.
![img](https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Asymmetric_cryptography_-_step_2.svg/800px-Asymmetric_cryptography_-_step_2.svg.png) * Github: [@Gagl08](https://github.com/Gagl08)
👤 **Laurian DUFRECHOU**
* Github: [@Laurian-Dufrechou](https://github.com/Laurian-Dufrechou)
👤 **Lucàs VABRE**
* Github: [@LucasVbr](https://github.com/LucasVbr)
***
+83 -32
View File
@@ -33,22 +33,62 @@ import java.util.Scanner;
public class Client extends Thread { public class Client extends Thread {
//elements d'un client /**
* Adresse IP de connexion au serveur
*/
private final String SERVER_IP; private final String SERVER_IP;
/**
* Port de connexion du serveur
*/
private final int SERVER_PORT; private final int SERVER_PORT;
/**
* Interface utilisateur
*/
private final FenetreClient fenetre; private final FenetreClient fenetre;
/**
* Le pseudonyme du client
*/
private String pseudo; private String pseudo;
private KeyPair clientKeys;
/**
* Paire de clés de chiffrage du client
*/
private final KeyPair clientKeys;
/**
* Clé publique du serveur
*/
private PublicKey serverKey; private PublicKey serverKey;
/**
* Flux d'entrée pour la version console
*/
private final Scanner scanner; private final Scanner scanner;
// Sockets de connexion /**
* Flux d'entrée du socket
*/
private ObjectInputStream inputStream; private ObjectInputStream inputStream;
/**
* Flux de sortie du socket
*/
private ObjectOutputStream outputStream; private ObjectOutputStream outputStream;
private ArrayList<String> fileAttenteMessage; /**
* File d'attente des messages à envoyer
*/
private final ArrayList<String> fileAttenteMessage;
/**
* Crée un nouveau client qui se connecte à un serveur
*
* @param ip Adresse du serveur (IP ou URI)
* @param port Port de connexion
*/
public Client(String ip, int port) { public Client(String ip, int port) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip); this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
this.SERVER_PORT = port; this.SERVER_PORT = port;
@@ -62,10 +102,11 @@ public class Client extends Thread{
} }
/** /**
* ancien object client sans fenetre * Crée un nouveau client qui se connecte à un serveur avec un pseudo
* @param ip adresse ip du client *
* @param port numeros de port du client * @param ip Adresse du serveur (IP ou URI)
* @param pseudo pseudo du client * @param port Port de connexion
* @param pseudo Le pseudo du client
*/ */
public Client(String ip, int port, String pseudo) { public Client(String ip, int port, String pseudo) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip); this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
@@ -80,11 +121,12 @@ public class Client extends Thread{
} }
/** /**
* Object client actuel * Crée un nouveau client lié à une interface utilisateur
* @param ip adresse ip du client *
* @param port numeros de port du client * @param ip Adresse du serveur (IP ou URI)
* @param pseudo nom du client * @param port Port de connexion au serveur
* @param fenetre fenetreClient assicié au client * @param pseudo Pseudonyme du client
* @param fenetre Interface du client
*/ */
public Client(String ip, int port, String pseudo, FenetreClient fenetre) { public Client(String ip, int port, String pseudo, FenetreClient fenetre) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip); this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
@@ -100,26 +142,30 @@ public class Client extends Thread{
@Override @Override
public void run() { public void run() {
// Demande la saisie du pseudo s'il n'est pas défini
if (pseudo == null) { if (pseudo == null) {
System.out.print("Pseudo: "); System.out.print("Pseudo: ");
pseudo = scanner.nextLine(); pseudo = scanner.nextLine();
} }
// Connexion au socket
try (Socket socket = new Socket(SERVER_IP, SERVER_PORT)) { try (Socket socket = new Socket(SERVER_IP, SERVER_PORT)) {
inputStream = new ObjectInputStream(socket.getInputStream()); inputStream = new ObjectInputStream(socket.getInputStream());
outputStream = new ObjectOutputStream(socket.getOutputStream()); outputStream = new ObjectOutputStream(socket.getOutputStream());
// Initialisation : envoi des clés et du pseudo
exchangeKeys(); exchangeKeys();
sendMessage(pseudo); sendMessage(pseudo);
// Ecoute du serveur // Écoute du serveur
ListenThread threadClient = new ListenThread(this, fenetre); ListenThread threadClient = new ListenThread(this, fenetre);
threadClient.start(); threadClient.start();
// Ecoute de l'entrée du clavier // Écoute de l'entrée du clavier
System.out.println("Tapez 'bye' pour quitter\n"); System.out.println("Tapez 'bye' pour quitter\n");
String message = ""; String message = "";
do { do {
// S'il y a un message dans la file d'attente, on l'envoie
if (fileAttenteMessage.size() > 0) { if (fileAttenteMessage.size() > 0) {
message = fileAttenteMessage.remove(0); message = fileAttenteMessage.remove(0);
sendMessage(message); sendMessage(message);
@@ -127,14 +173,15 @@ public class Client extends Thread{
} while (!Objects.equals(message, "bye")); } while (!Objects.equals(message, "bye"));
} catch (ConnectException e) { } catch (ConnectException e) {
System.err.println("Serveur non trouvé"); // TODO throw error System.err.println("Serveur non trouvé");
if (fenetre != null) {
if (fenetre != null) { // Affiche l'erreur sur l'interface utilisateur
new FenetreErreur("Serveur non trouvé", fenetre); new FenetreErreur("Serveur non trouvé", fenetre);
fenetre.deconnexion(); fenetre.deconnexion();
} }
} catch (EOFException e) { } catch (EOFException e) {
System.err.println("Connexion perdue"); // TODO throw error System.err.println("Connexion perdue");
if (fenetre != null) { if (fenetre != null) { // Affiche l'erreur sur l'interface utilisateur
new FenetreErreur("Connexion perdue", fenetre); new FenetreErreur("Connexion perdue", fenetre);
fenetre.deconnexion(); fenetre.deconnexion();
} }
@@ -144,11 +191,12 @@ public class Client extends Thread{
} }
/** /**
* envoie la clef client au serveur * Échange les clés publiques du client et du serveur
* @throws IOException *
* @throws ClassNotFoundException * @throws IOException Erreur de connexion
* @throws ClassNotFoundException L'objet reçu n'a pas pu être cast en PublicKey
*/ */
public void exchangeKeys() throws IOException, ClassNotFoundException { private void exchangeKeys() throws IOException, ClassNotFoundException {
// Envoie sa clé // Envoie sa clé
outputStream.writeObject(clientKeys.getPublic()); outputStream.writeObject(clientKeys.getPublic());
@@ -157,9 +205,10 @@ public class Client extends Thread{
} }
/** /**
* envoie un message dans la socket * Envoie un message au serveur
* @param message message a envoyer au serveur *
* @throws IOException * @param message Le message à envoyer
* @throws IOException Erreur de connexion au socket
*/ */
public void sendMessage(String message) throws IOException { public void sendMessage(String message) throws IOException {
byte[] messageCrypte = RSA.encrypter(message, serverKey); byte[] messageCrypte = RSA.encrypter(message, serverKey);
@@ -167,10 +216,11 @@ public class Client extends Thread{
} }
/** /**
* Recupere un message evoye par le serveur * Récupère un message du serveur
* @return *
* @throws IOException * @return Le message reçu
* @throws ClassNotFoundException * @throws IOException Erreur de connexion au serveur
* @throws ClassNotFoundException L'objet reçu n'a pas pu être cast en byte[]
*/ */
public String getMessage() throws IOException, ClassNotFoundException { public String getMessage() throws IOException, ClassNotFoundException {
byte[] messageCrypte = (byte[]) inputStream.readObject(); byte[] messageCrypte = (byte[]) inputStream.readObject();
@@ -178,8 +228,9 @@ public class Client extends Thread{
} }
/** /**
* Ajoute un message à la file d'attente * Ajoute un message dans la file d'attente des messages à envoyer
* @param message messsage a ajouter a la file *
* @param message Le message à envoyer
*/ */
public void addMessage(String message) { public void addMessage(String message) {
this.fileAttenteMessage.add(message); this.fileAttenteMessage.add(message);
+15 -11
View File
@@ -22,10 +22,14 @@ import java.net.SocketException;
*/ */
public class ListenThread extends Thread { public class ListenThread extends Thread {
/** Instance du client */ /**
* Instance du client
*/
private final Client client; private final Client client;
/** Interface utilisateur du client */ /**
* Interface utilisateur du client
*/
private final FenetreClient fenetre; private final FenetreClient fenetre;
/** /**
@@ -39,10 +43,10 @@ public class ListenThread extends Thread {
} }
/** /**
* Object d'ecoute avec fenetre * Crée un nouveau thread lorsque le client utilise une interface utilisateur
* *
* @param client client associe à l'ecoute * @param client client associe à l'écoute
* @param fenetre fenetreClient associe à l'ecoute * @param fenetre Interface utilisateur du client
*/ */
public ListenThread(Client client, FenetreClient fenetre) { public ListenThread(Client client, FenetreClient fenetre) {
this.client = client; this.client = client;
@@ -56,16 +60,16 @@ public class ListenThread extends Thread {
String message; String message;
while (true) { while (true) {
message = client.getMessage(); message = client.getMessage();
// Log
System.out.println(message); System.out.println(message);
if (fenetre != null) { if (fenetre != null) fenetre.displayNewMessage(message);
fenetre.displayNewMessage(message);
} }
} } catch (SocketException ignored) { // Le socket client est fermé
} catch (SocketException ignored) {
System.out.println("Vous avez quitté le salon"); System.out.println("Vous avez quitté le salon");
} catch (EOFException ignored) { } catch (EOFException ignored) { // Fermeture coté serveur
System.err.println("Connexion perdue"); System.err.println("Connexion perdue");
if (fenetre != null) { if (fenetre != null) { // Affiche une erreur sur l'interface utilisateur
new FenetreErreur("Connexion perdue", fenetre); new FenetreErreur("Connexion perdue", fenetre);
fenetre.deconnexion(); fenetre.deconnexion();
} }
+5
View File
@@ -51,6 +51,7 @@ public class FenetreClient extends JFrame {
// Au lancement, on ne peut pas envoyer de message sans être connecté au serveur // Au lancement, on ne peut pas envoyer de message sans être connecté au serveur
messageInput.setEnabled(false); messageInput.setEnabled(false);
envoyerButton.setEnabled(false); envoyerButton.setEnabled(false);
deconnexionButton.setEnabled(false);
// Action des boutons // Action des boutons
messageInput.addKeyListener(new KeyAdapter() { messageInput.addKeyListener(new KeyAdapter() {
@@ -114,10 +115,12 @@ public class FenetreClient extends JFrame {
addressInput.setEnabled(false); addressInput.setEnabled(false);
portInput.setEnabled(false); portInput.setEnabled(false);
pseudoInput.setEnabled(false); pseudoInput.setEnabled(false);
connexionButton.setEnabled(false);
// Active l'interface de tchat // Active l'interface de tchat
messageInput.setEnabled(true); messageInput.setEnabled(true);
envoyerButton.setEnabled(true); envoyerButton.setEnabled(true);
deconnexionButton.setEnabled(true);
} }
/** /**
@@ -137,10 +140,12 @@ public class FenetreClient extends JFrame {
addressInput.setEnabled(true); addressInput.setEnabled(true);
portInput.setEnabled(true); portInput.setEnabled(true);
pseudoInput.setEnabled(true); pseudoInput.setEnabled(true);
connexionButton.setEnabled(true);
// Désactive l'interface de tchat // Désactive l'interface de tchat
messageInput.setEnabled(false); messageInput.setEnabled(false);
envoyerButton.setEnabled(false); envoyerButton.setEnabled(false);
deconnexionButton.setEnabled(false);
} }
/** /**