mirror of
https://github.com/LucasVbr/mini-chat.git
synced 2026-05-13 17:21:54 +00:00
Commentaires + README
This commit is contained in:
Generated
+7
-150
@@ -2,27 +2,13 @@
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<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$/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/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/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 id="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" name="Changes by burgu" comment="" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
@@ -40,92 +26,6 @@
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</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">
|
||||
<option name="stateVersion" value="1" />
|
||||
</component>
|
||||
@@ -152,6 +52,7 @@
|
||||
"com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrarySuperClass.JUnit5": "",
|
||||
"create.test.in.the.same.root": "true",
|
||||
"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.proportion": "0.15",
|
||||
"project.structure.side.proportion": "0.2",
|
||||
@@ -173,33 +74,7 @@
|
||||
<recent name="utils" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager" selected="Application.Server">
|
||||
<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>
|
||||
<component name="RunManager" selected="Application.ui.FenetreClient">
|
||||
<configuration name="FenetreServeur" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
|
||||
<option name="MAIN_CLASS_NAME" value="ui.FenetreServeur" />
|
||||
<module name="projet-mini-chat" />
|
||||
@@ -213,19 +88,6 @@
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</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">
|
||||
<option name="MAIN_CLASS_NAME" value="ui.FenetreClient" />
|
||||
<module name="projet-mini-chat" />
|
||||
@@ -254,19 +116,13 @@
|
||||
</configuration>
|
||||
<list>
|
||||
<item itemvalue="Application.ui.FenetreClient (1)" />
|
||||
<item itemvalue="Application.App" />
|
||||
<item itemvalue="Application.Client" />
|
||||
<item itemvalue="Application.FenetreServeur" />
|
||||
<item itemvalue="Application.ui.FenetreClient" />
|
||||
<item itemvalue="Application.Server" />
|
||||
</list>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="Application.Server" />
|
||||
<item itemvalue="Application.App" />
|
||||
<item itemvalue="Application.FenetreServeur" />
|
||||
<item itemvalue="Application.ui.FenetreClient" />
|
||||
<item itemvalue="Application.Client" />
|
||||
<item itemvalue="Application.FenetreServeur" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
@@ -282,7 +138,8 @@
|
||||
<workItem from="1669119772164" duration="6834000" />
|
||||
<workItem from="1669724625302" duration="6630000" />
|
||||
<workItem from="1670230395395" duration="19588000" />
|
||||
<workItem from="1670329829454" duration="6293000" />
|
||||
<workItem from="1670329829454" duration="6520000" />
|
||||
<workItem from="1670405222370" duration="1434000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
|
||||
@@ -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
|
||||
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.
|
||||
> Projet de réseau, semestre 5 Licence Informatique 2022-2023 à l'INU Champollion.
|
||||
|
||||

|
||||
## Auteurs
|
||||
|
||||
## Pendant la communication
|
||||
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.
|
||||
👤 **Gaël BURGUÈS**
|
||||
|
||||

|
||||
* 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)
|
||||
|
||||
***
|
||||
+84
-33
@@ -31,24 +31,64 @@ import java.util.Scanner;
|
||||
* @author Lucàs Vabre
|
||||
*/
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Port de connexion du serveur
|
||||
*/
|
||||
private final int SERVER_PORT;
|
||||
|
||||
/**
|
||||
* Interface utilisateur
|
||||
*/
|
||||
private final FenetreClient fenetre;
|
||||
|
||||
/**
|
||||
* Le pseudonyme du client
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* Flux d'entrée pour la version console
|
||||
*/
|
||||
private final Scanner scanner;
|
||||
|
||||
// Sockets de connexion
|
||||
/**
|
||||
* Flux d'entrée du socket
|
||||
*/
|
||||
private ObjectInputStream inputStream;
|
||||
|
||||
/**
|
||||
* Flux de sortie du socket
|
||||
*/
|
||||
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) {
|
||||
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
|
||||
this.SERVER_PORT = port;
|
||||
@@ -62,10 +102,11 @@ public class Client extends Thread{
|
||||
}
|
||||
|
||||
/**
|
||||
* ancien object client sans fenetre
|
||||
* @param ip adresse ip du client
|
||||
* @param port numeros de port du client
|
||||
* @param pseudo pseudo du client
|
||||
* Crée un nouveau client qui se connecte à un serveur avec un pseudo
|
||||
*
|
||||
* @param ip Adresse du serveur (IP ou URI)
|
||||
* @param port Port de connexion
|
||||
* @param pseudo Le pseudo du client
|
||||
*/
|
||||
public Client(String ip, int port, String pseudo) {
|
||||
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
|
||||
@@ -80,11 +121,12 @@ public class Client extends Thread{
|
||||
}
|
||||
|
||||
/**
|
||||
* Object client actuel
|
||||
* @param ip adresse ip du client
|
||||
* @param port numeros de port du client
|
||||
* @param pseudo nom du client
|
||||
* @param fenetre fenetreClient assicié au client
|
||||
* Crée un nouveau client lié à une interface utilisateur
|
||||
*
|
||||
* @param ip Adresse du serveur (IP ou URI)
|
||||
* @param port Port de connexion au serveur
|
||||
* @param pseudo Pseudonyme du client
|
||||
* @param fenetre Interface du client
|
||||
*/
|
||||
public Client(String ip, int port, String pseudo, FenetreClient fenetre) {
|
||||
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
|
||||
@@ -100,26 +142,30 @@ public class Client extends Thread{
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// Demande la saisie du pseudo s'il n'est pas défini
|
||||
if (pseudo == null) {
|
||||
System.out.print("Pseudo: ");
|
||||
pseudo = scanner.nextLine();
|
||||
}
|
||||
|
||||
// Connexion au socket
|
||||
try (Socket socket = new Socket(SERVER_IP, SERVER_PORT)) {
|
||||
inputStream = new ObjectInputStream(socket.getInputStream());
|
||||
outputStream = new ObjectOutputStream(socket.getOutputStream());
|
||||
|
||||
// Initialisation : envoi des clés et du pseudo
|
||||
exchangeKeys();
|
||||
sendMessage(pseudo);
|
||||
|
||||
// Ecoute du serveur
|
||||
// Écoute du serveur
|
||||
ListenThread threadClient = new ListenThread(this, fenetre);
|
||||
threadClient.start();
|
||||
|
||||
// Ecoute de l'entrée du clavier
|
||||
// Écoute de l'entrée du clavier
|
||||
System.out.println("Tapez 'bye' pour quitter\n");
|
||||
String message = "";
|
||||
do {
|
||||
// S'il y a un message dans la file d'attente, on l'envoie
|
||||
if (fileAttenteMessage.size() > 0) {
|
||||
message = fileAttenteMessage.remove(0);
|
||||
sendMessage(message);
|
||||
@@ -127,14 +173,15 @@ public class Client extends Thread{
|
||||
} while (!Objects.equals(message, "bye"));
|
||||
|
||||
} catch (ConnectException e) {
|
||||
System.err.println("Serveur non trouvé"); // TODO throw error
|
||||
if (fenetre != null) {
|
||||
System.err.println("Serveur non trouvé");
|
||||
|
||||
if (fenetre != null) { // Affiche l'erreur sur l'interface utilisateur
|
||||
new FenetreErreur("Serveur non trouvé", fenetre);
|
||||
fenetre.deconnexion();
|
||||
}
|
||||
} catch (EOFException e) {
|
||||
System.err.println("Connexion perdue"); // TODO throw error
|
||||
if (fenetre != null) {
|
||||
System.err.println("Connexion perdue");
|
||||
if (fenetre != null) { // Affiche l'erreur sur l'interface utilisateur
|
||||
new FenetreErreur("Connexion perdue", fenetre);
|
||||
fenetre.deconnexion();
|
||||
}
|
||||
@@ -144,11 +191,12 @@ public class Client extends Thread{
|
||||
}
|
||||
|
||||
/**
|
||||
* envoie la clef client au serveur
|
||||
* @throws IOException
|
||||
* @throws ClassNotFoundException
|
||||
* Échange les clés publiques du client et du serveur
|
||||
*
|
||||
* @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é
|
||||
outputStream.writeObject(clientKeys.getPublic());
|
||||
|
||||
@@ -157,9 +205,10 @@ public class Client extends Thread{
|
||||
}
|
||||
|
||||
/**
|
||||
* envoie un message dans la socket
|
||||
* @param message message a envoyer au serveur
|
||||
* @throws IOException
|
||||
* Envoie un message au serveur
|
||||
*
|
||||
* @param message Le message à envoyer
|
||||
* @throws IOException Erreur de connexion au socket
|
||||
*/
|
||||
public void sendMessage(String message) throws IOException {
|
||||
byte[] messageCrypte = RSA.encrypter(message, serverKey);
|
||||
@@ -167,10 +216,11 @@ public class Client extends Thread{
|
||||
}
|
||||
|
||||
/**
|
||||
* Recupere un message evoye par le serveur
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws ClassNotFoundException
|
||||
* Récupère un message du serveur
|
||||
*
|
||||
* @return Le message reçu
|
||||
* @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 {
|
||||
byte[] messageCrypte = (byte[]) inputStream.readObject();
|
||||
@@ -178,8 +228,9 @@ public class Client extends Thread{
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un message à la file d'attente
|
||||
* @param message messsage a ajouter a la file
|
||||
* Ajoute un message dans la file d'attente des messages à envoyer
|
||||
*
|
||||
* @param message Le message à envoyer
|
||||
*/
|
||||
public void addMessage(String message) {
|
||||
this.fileAttenteMessage.add(message);
|
||||
|
||||
@@ -22,10 +22,14 @@ import java.net.SocketException;
|
||||
*/
|
||||
public class ListenThread extends Thread {
|
||||
|
||||
/** Instance du client */
|
||||
/**
|
||||
* Instance du client
|
||||
*/
|
||||
private final Client client;
|
||||
|
||||
/** Interface utilisateur du client */
|
||||
/**
|
||||
* Interface utilisateur du client
|
||||
*/
|
||||
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 fenetre fenetreClient associe à l'ecoute
|
||||
* @param client client associe à l'écoute
|
||||
* @param fenetre Interface utilisateur du client
|
||||
*/
|
||||
public ListenThread(Client client, FenetreClient fenetre) {
|
||||
this.client = client;
|
||||
@@ -56,16 +60,16 @@ public class ListenThread extends Thread {
|
||||
String message;
|
||||
while (true) {
|
||||
message = client.getMessage();
|
||||
|
||||
// Log
|
||||
System.out.println(message);
|
||||
if (fenetre != null) {
|
||||
fenetre.displayNewMessage(message);
|
||||
}
|
||||
if (fenetre != null) fenetre.displayNewMessage(message);
|
||||
}
|
||||
} catch (SocketException ignored) {
|
||||
} catch (SocketException ignored) { // Le socket client est fermé
|
||||
System.out.println("Vous avez quitté le salon");
|
||||
} catch (EOFException ignored) {
|
||||
} catch (EOFException ignored) { // Fermeture coté serveur
|
||||
System.err.println("Connexion perdue");
|
||||
if (fenetre != null) {
|
||||
if (fenetre != null) { // Affiche une erreur sur l'interface utilisateur
|
||||
new FenetreErreur("Connexion perdue", fenetre);
|
||||
fenetre.deconnexion();
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ public class FenetreClient extends JFrame {
|
||||
// Au lancement, on ne peut pas envoyer de message sans être connecté au serveur
|
||||
messageInput.setEnabled(false);
|
||||
envoyerButton.setEnabled(false);
|
||||
deconnexionButton.setEnabled(false);
|
||||
|
||||
// Action des boutons
|
||||
messageInput.addKeyListener(new KeyAdapter() {
|
||||
@@ -114,10 +115,12 @@ public class FenetreClient extends JFrame {
|
||||
addressInput.setEnabled(false);
|
||||
portInput.setEnabled(false);
|
||||
pseudoInput.setEnabled(false);
|
||||
connexionButton.setEnabled(false);
|
||||
|
||||
// Active l'interface de tchat
|
||||
messageInput.setEnabled(true);
|
||||
envoyerButton.setEnabled(true);
|
||||
deconnexionButton.setEnabled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -137,10 +140,12 @@ public class FenetreClient extends JFrame {
|
||||
addressInput.setEnabled(true);
|
||||
portInput.setEnabled(true);
|
||||
pseudoInput.setEnabled(true);
|
||||
connexionButton.setEnabled(true);
|
||||
|
||||
// Désactive l'interface de tchat
|
||||
messageInput.setEnabled(false);
|
||||
envoyerButton.setEnabled(false);
|
||||
deconnexionButton.setEnabled(false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user