Code Complet (Java - Python - Scala)
Code Complet (Java - Python - Scala)
package Quiz_Package;
import [Link].*;
import [Link].*;
import [Link];
import [Link].*;
import [Link];
import [Link];
import [Link];
/**
* Creates new form ClientQuiz
*/
public ClientQuiz() {
initComponents();
// Initialisation des questions
questions = [Link](
"Q1. Une @ IPV6 tient sur :\n A. 32 bits\n B. 128 bits",
"Q2. Un numéro de port sert à : A. Identifier une machine B. Identifier une application",
"Q3. L'API Socket est au niveau : A. Transport B. Application",
"Q4. TCP fonctionne en mode : \n A. Connecté\n B. Non connecté",
"Q5. UDP est :\n A. Fiable\n B. Non Fiable ",
"Q6. [Link] est une @ IPV4 :\n A. Privée\n B. Public ",
"Q7. [Link] est une @ IPV4 :\n A. Classe D\n B. Classe C ",
"Q8. ServerSocket est la classe Java qui implémente :\n A. Les Sockets d’écoute\n B. Les Sockets de transfert",
"Q9. La classe Date est définie dans :\n A. [Link]\n B. [Link] ",
"Q10. La classe InetAddress correspond à :\n A. Adresse IP\n B. Adresse URL"
);
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation([Link].EXIT_ON_CLOSE);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see [Link]
*/
try {
for ([Link] info : [Link]()) {
if ("Nimbus".equals([Link]())) {
[Link]([Link]());
break;
}
package Quiz_Package;
import [Link].*;
import [Link].*;
import [Link];
import [Link].*;
import [Link];
import [Link];
import [Link];
/**
* Creates new form ClientQuiz
*/
public ClientQuiz() {
initComponents();
// Initialisation des questions
questions = [Link](
"Q1. Une @ IPV6 tient sur :\n A. 32 bits\n B. 128 bits",
"Q2. Un numéro de port sert à : A. Identifier une machine B. Identifier une application",
"Q3. L'API Socket est au niveau : A. Transport B. Application",
"Q4. TCP fonctionne en mode : \n A. Connecté\n B. Non connecté",
"Q5. UDP est :\n A. Fiable\n B. Non Fiable ",
"Q6. [Link] est une @ IPV4 :\n A. Privée\n B. Public ",
"Q7. [Link] est une @ IPV4 :\n A. Classe D\n B. Classe C ",
"Q8. ServerSocket est la classe Java qui implémente :\n A. Les Sockets d’écoute\n B. Les Sockets de transfert",
"Q9. La classe Date est définie dans :\n A. [Link]\n B. [Link] ",
"Q10. La classe InetAddress correspond à :\n A. Adresse IP\n B. Adresse URL"
);
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation([Link].EXIT_ON_CLOSE);
[Link](20);
[Link](5);
[Link](jTextArea1);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see [Link]
*/
try {
for ([Link] info : [Link]()) {
if ("Nimbus".equals([Link]())) {
[Link]([Link]());
break;
}
}
} catch (ClassNotFoundException ex) {
[Link]([Link]()).log([Link], null, ex);
} catch (InstantiationException ex) {
[Link]([Link]()).log([Link], null, ex);
} catch (IllegalAccessException ex) {
[Link]([Link]()).log([Link], null, ex);
} catch ([Link] ex) {
[Link]([Link]()).log([Link], null, ex);
}
//</editor-fold>
import socket
import threading
import tkinter as tk
from tkinter import ttk
from datetime import datetime
class ServeurQuiz:
def __init__(self, root):
[Link] = root
[Link]("Serveur QUIZ")
[Link]("400x300")
self.client_count = 0
self.correct_answers = ["B", "B", "A", "A", "B", "A", "B", "A", "B", "A"]
# Widgets
self.label_title = [Link](root, text="Serveur QUIZ", font=("Algerian", 24), fg="dark blue")
self.label_title.pack(pady=10)
def update_date(self):
current_date = [Link]().strftime("%a %b %d %Y")
self.date_text.config(state="normal")
self.date_text.delete(0, [Link])
self.date_text.insert(0, current_date)
self.date_text.config(state="readonly")
def start_server(self):
self.server_socket = [Link](socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind(('localhost', 50000))
self.server_socket.listen(5)
self.start_button.config(state="disabled")
[Link](target=self.accept_clients).start()
def accept_clients(self):
while True:
client_socket, client_address = self.server_socket.accept()
self.client_count += 1
self.add_client_to_table(f"Client-{self.client_count}", f"Thread-{self.client_count}",
[Link]().strftime("%H:%M:%S"))
[Link](target=self.handle_client, args=(client_socket,)).start()
def stop_server(self):
if hasattr(self, 'server_socket'):
self.server_socket.close()
self.start_button.config(state="normal")
self.stop_button.config(state="disabled")
if __name__ == "__main__":
root = [Link]()
app = ServeurQuiz(root)
[Link]()
import socket
import threading
import tkinter as tk
from tkinter import messagebox
from tkinter import scrolledtext
SERVER_ADDRESS = 'localhost'
SERVER_PORT = 50000
class ClientQuizApp:
def __init__(self, root):
[Link] = root
[Link]("Client QUIZ")
[Link]("400x500")
[Link] = None
[Link] = None
self.in_ = None
[Link] = False
[Link] = [
"Q1. Une @ IPV6 tient sur :\n A. 32 bits\n B. 128 bits",
"Q2. Un numéro de port sert à : A. Identifier une machine B. Identifier une application",
"Q3. L'API Socket est au niveau : A. Transport B. Application",
"Q4. TCP fonctionne en mode : \n A. Connecté\n B. Non connecté",
"Q5. UDP est :\n A. Fiable\n B. Non Fiable ",
"Q6. [Link] est une @ IPV4 :\n A. Privée\n B. Public ",
"Q7. [Link] est une @ IPV4 :\n A. Classe D\n B. Classe C ",
"Q8. ServerSocket est la classe Java qui implémente :\n A. Les Sockets d’écoute\n B. Les Sockets de transfert",
"Q9. La classe Date est définie dans :\n A. [Link]\n B. [Link] ",
"Q10. La classe InetAddress correspond à :\n A. Adresse IP\n B. Adresse URL"
]
self.current_question_index = 0
def init_ui(self):
# Titre
self.label_title = [Link]([Link], text="Client QUIZ", font=("Algerian", 36), fg="green")
self.label_title.pack(pady=10)
# Affichage de la question
self.label_question = [Link]([Link], text="Question ?", font=("Segoe UI", 12))
self.label_question.pack()
# Réponse de l'utilisateur
self.label_answer = [Link](frame_bottom, text="Ma Réponse", font=("Segoe UI", 12))
self.label_answer.grid(row=0, column=0, padx=10)
self.entry_score = [Link](frame_bottom, font=("Segoe UI", 12), fg="green", state="readonly", width=10) # Largeur réduite
self.entry_score.grid(row=0, column=3, padx=10, ipadx=20)
def connect_to_server(self):
try:
[Link] = [Link](socket.AF_INET, socket.SOCK_STREAM)
[Link]((SERVER_ADDRESS, SERVER_PORT))
[Link] = [Link]('w')
self.in_ = [Link]('r')
[Link] = True
self.text_area.delete(1.0, [Link])
self.display_question()
except Exception as e:
[Link]("Erreur", f"Erreur de connexion: {str(e)}")
def display_question(self):
if self.current_question_index < len([Link]):
self.text_area.delete(1.0, [Link])
self.text_area.insert([Link], [Link][self.current_question_index])
else:
self.text_area.delete(1.0, [Link])
self.text_area.insert([Link], "Fin des questions. Cliquez sur 'Quitter'.")
def send_answer(self):
if not [Link]:
self.text_area.delete(1.0, [Link])
self.text_area.insert([Link], "Veuillez d'abord vous connecter au serveur.")
return
response = self.entry_answer.get().strip()
if not response:
[Link]("Attention", "Veuillez saisir une réponse avant de continuer.")
return
[Link](response + "\n")
[Link]()
self.current_question_index += 1
self.display_question()
if self.current_question_index == len([Link]):
score = self.in_.readline().strip()
self.entry_score.config(state="normal")
self.entry_score.delete(0, [Link])
self.entry_score.insert(0, score)
self.entry_score.config(state="readonly")
def exit_app(self):
if [Link]:
[Link]()
[Link]()
if __name__ == "__main__":
root = [Link]()
app = ClientQuizApp(root)
[Link]()
[Link].{Application,Platform}
[Link]
[Link].{Button,Label,TextArea,TextField}
[Link].{HBox,Pane,VBox}
[Link]
[Link]
[Link].{ServerSocket,Socket}
[Link].{BufferedReader,InputStreamReader,PrintWriter}
[Link]
[Link]
[Link]
[Link]
[Link]
objectserveurextendsApp{
[Link](classOf[MyServer])
}
//Classereprésentantunelignedutableau
caseclassClientInfo(clientNumber:Int,threadName:String,connectionTime:String)
classMyServerextendsApplication{
@volatilevarserverRunning=false
varclientCount=0//Compteurdeclients
valclientData:ObservableList[ClientInfo]=[Link]()//Donnéespourletableau
overridedefstart(primaryStage:Stage):Unit={
//Déclarationanticipéedesvariablesnécessaires
valtextArea=newTextArea()//Utilisationd'unTextAreapourafficherlesinformationsdesclients
[Link](false)//RendreleTextAreanonéditable
[Link](true)//ActiverleretouràlalignedansleTextArea
[Link](420,150)//FixerlatailleduTextArea
//Boutonspourdémarrer
valbutton1=newButton("DémarrerServeur")
[Link](10)
[Link]("-fx-background-color:blue;-fx-text-fill:white;")
//Boutonspourarrêterleserveur
valbutton2=newButton("FermerServeur")
[Link]("-fx-background-color:blue;-fx-text-fill:white;")
vallabel1=newLabel("ServeurQuiz")
[Link]("-fx-font-size:36px;-fx-font-family:'Algerian';-fx-text-fill:blue;")
[Link](130)
vallabel2=newLabel("Dated'aujourd'hui:")
valtextField=newTextField(s"${[Link]()}")
[Link](false)
valaligneTexte=newVBox(5,label2,textField)
valaligneButton=newHBox(230,button1,button2)
varserverSocket:Option[ServerSocket]=None
varclientSocket:Option[Socket]=None
varout:Option[PrintWriter]=None
varin:Option[BufferedReader]=None
//Méthodepourarrêterleserveur
defstopServer():Unit=Future{
try{
serverRunning=false
[Link](_.close())
[Link](_.close())
[Link](_.close())
[Link](_.close())
i=0
in=None
out=None
clientSocket=None
serverSocket=None
println("Serveurarrêté.")
[Link](()=>println("Serveurprêtàredémarrer."))//Miseàjourasynchrone
}catch{
caseex:Exception=>
println(s"Erreurlorsdel'arrêtduserveur:${[Link]}")
}
}
[Link](_=>{
if(serverRunning){
println("Leserveurestdéjàencoursd'exécution.")
return
}
serverRunning=true
Future{
try{
serverSocket=Some(newServerSocket(12345))
println("Serveurdémarré,enattentedeconnexions...")
while(serverRunning){
valsocket=[Link]()//Accepteruneconnexionclient
clientCount+=1
valthreadName=s"Thread-$clientCount"
valconnectionTime=[Link]().withNano(0).toString+"GMT"
//AjouterlesinformationsduclientdansleTextArea
[Link](()=>{
valclientInfo=ClientInfo(clientCount,threadName,connectionTime)
valclientInfoText=s"Client${[Link]}|${[Link]}|${[Link]}"
valupdatedText=[Link]+"\n"+clientInfoText
[Link](updatedText)//AjouterlesinformationsdeclientauTextArea
if([Link]("\n").length>4){
//Limiterà4lignesdansleTextArea
vallines=[Link]("\n").drop(1).mkString("\n")
[Link](lines)
}
println(s"Clientajouté:$clientData")
})
println(s"Client$clientCountconnecté!")
Future{
vallocalOut=newPrintWriter([Link],true)
vallocalIn=newBufferedReader(newInputStreamReader([Link]))
try{
while(serverRunning){
valmessage=[Link]()
if(message==null)thrownewException("Clientdéconnecté.")
valresponse=if(localIndex>9||message!=Reponse(localIndex))"false"else"true"
[Link](response)
localIndex+=1
}
}catch{
caseex:Exception=>
println(s"Erreurpourleclient$clientCount:${[Link]}")
}finally{
[Link]()
[Link]()
[Link]()
}
}([Link])
}
}catch{
caseex:Exception=>
println(s"Erreurduserveur:${[Link]}")
}finally{
stopServer()
}
}
})
//Boutonpourfermerleserver
[Link](_=>stopServer())
//ConfigurationduTextArea
[Link](30)
[Link](200)
valroot=newPane()
[Link](label1,aligneTexte,aligneButton,textArea)
[Link](180)
[Link](80)
[Link](30)
[Link](150)
valscene=newScene(root,500,400)
[Link]("ServeurScalaavecJavaFX")
[Link](scene)
[Link](false)
[Link]()
}
}
[Link].{Application,Platform}
[Link]
[Link].{HBox,Pane}
[Link].{Button,Label,TextArea,TextField}
[Link]
[Link]
[Link]
[Link].{BufferedReader,InputStreamReader,PrintWriter}
objectMainextendsApp{
[Link](classOf[client])
}
classclientextendsApplication{
overridedefstart(primaryStage:Stage):Unit={
//Questions
valQ1="[Link]@IPV6tientsur:\nA.32bits\nB.128bits"
valQ2="[Link]érodeportsertà:\[Link]\[Link]"
valQ3="Q3.L’APISocketestauniveau:\[Link]\[Link]"
valQ4="[Link]\[Link]é\[Link]é"
valQ5="[Link]:\[Link]\[Link]"
valQ6="Q6.10.0.0.1estune@IPV4:\[Link]ée\[Link]"
valQ7="Q7.197.0.0.1estune@IPV4:\[Link]\[Link]"
valQ8="[Link]émente:\[Link]’écoute\[Link]"
valQ9="[Link]éfiniedans:\[Link]\[Link]"
valQ10="[Link]à:\[Link]\[Link]"
vars=0
//Déclarationdesvariablespartagées
varclientSocket:Option[Socket]=None//Serainitialisélorsquebutton1estcliqué
varout:Option[PrintWriter]=None//Fluxdesortie(serainitialiséaveclesocket)
varin:Option[BufferedReader]=None//Fluxd'entrée(serainitialiséaveclesocket)
vallabel=newTextArea()
[Link](false)
[Link](40)//Positionhorizontale
[Link](70)//Positionverticale
[Link](370,120)
vallabel2=newLabel("Questions:")
[Link](30)//Positionhorizontale
[Link](50)
[Link]("-fx-font-size:14px;-fx-font-weight:bold;")
vallabel3=newLabel("ClientQuiz")
[Link](130)//Positionhorizontale
[Link](0)
//Changerlatailleetlacouleurdutextedulabel
[Link]("-fx-font-size:36px;-fx-font-family:'Algerian';-fx-text-fill:green;")//Tailleetcouleur
valtextField1=newTextField()
//Changerlatailledelapolicedutexte
[Link]("-fx-font-size:10px;")//Tailledepolicede18pixels
valtextField2=newTextField()
[Link]("-fx-font-size:10px;")
//RendreleTextField2nonmodifiable
[Link](false)
[Link](s"$s/10")//initialiselascoreazero
vallabelField1=newLabel("MaReponse")
[Link]("-fx-font-size:14px;-fx-font-weight:bold;")
vallabelField2=newLabel("MonScore")
valaligne_field=newHBox(30)
aligne_field.[Link](labelField1,textField1,labelField2,textField2)
aligne_field.setLayoutY(280)
valbutton1=newButton("Connecter")
[Link]("-fx-background-color:green;-fx-text-fill:white;")
valbutton2=newButton("QuestionSuivante")
[Link]("-fx-background-color:green;-fx-text-fill:white;")
valbutton3=newButton("Quitter")
[Link]("-fx-background-color:green;-fx-text-fill:white;")
valaligne_button=newHBox(105)
aligne_button.[Link](button1,button2,button3)
aligne_button.setLayoutY(360)
//PariteImplementationdelaLogique
[Link](_=>[Link]())
[Link](_=>{clientSocket=Some(newSocket("localhost",12345))//Connexionauserveur
out=[Link](socket=>newPrintWriter([Link],true))
in=[Link](socket=>newBufferedReader(newInputStreamReader([Link])))
s=0
[Link](Q1)
})
valQuestions=ArrayBuffer(Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10)
vari=0
[Link](_=>{
if(!([Link]().equals("A"))&!([Link]().equals("B"))){
[Link](Questions(i)+"\nEntrezsoitAouB")
}else{
i+=1
if(i>9){
[Link]("FINDUQUIZ")
}else{
if(clientSocket==None){
[Link]("Veuillezvousconnecterauserveur")
}else{
[Link](Questions(i))//Afficherlaprochainequestion
}
}
try{
[Link](_.println([Link]()))//Envoyerlaréponseauserveur
[Link]{reader=>
valresponse=[Link]()//Lirelaréponseenvoyéeparleserveur
if(response==null){
//Silaconnexionestperdue,afficherunmessage
thrownewException("Connexionperdueavecleserveur.")
s=0
}
elseif(response=="true"){
s+=1
[Link](s"$s/10")//Mettreàjourlescore
}
[Link]("")
})
valroot=newPane()//Conteneurvertical
[Link](label,aligne_button,label2,label3,aligne_field)
valscene=newScene(root,450,400)
[Link]("ApplicationScalaavecJavaFX")
[Link](scene)
[Link](false)//Empêcheleredimensionnementdelafenêtre
[Link]()
}
}