[Socket][mini-projet] Quelques questions
Bonsoir,
Je suis en train de m'entrainer avec les sockets et grace à certains tuto, j'ai réussi à faire quelque chose, maintenant pour m'entrainer, j'aimerais créer un mini-programme style msn mais tres basique; c'est à dire, chaque client peut envoyer un message et tous les autres le voient affichés dans un Jpanel.
J'arrive parfaitement à faire ca avec un seul client(mais ca sert à rien ^^), mais je ne sais trop comment m'y prendre pour le faire avec plusieurs... On m'a dit d'employer des threads mais je ne vois pas trop comment faire non plus...
Auriez-vous une idée ? Pour le moment mon code ressemble à ca :
classe Server
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package principal;
import socket.SocketFonction;
public class Server {
public static SocketFonction net = new SocketFonction();
public static void main(String[] args) {
net.CreateServeur(9999);
String msg;
String reponse;
for(;;){
msg = net.getMsg();
reponse = msg;
net.sendMsg(reponse);
}
}
} |
classe Gui(juste le main et l'event
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static SocketFonction net = new SocketFonction();
public static void main(String[] args){
net.CreateClient("127.0.0.1",9999);
Gui gui = new Gui();
gui.setVisible(true);
for(;;){
Texte = Texte + net.getMsg() + "\n";
textArea.setText(Texte);
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
net.sendMsg(jTextField1.getText() + " : "+ jTextField.getText());
jTextField.setText(null);
}
} |
La classe dans laquelle j'ai les diverses fonctions :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| public class SocketFonction {
ServerSocket SServer;
Socket SClient;
DataInputStream is;
PrintStream os;
public boolean CreateServeur(int port){
System.out.println("Wait client");
try {
SServer = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
try {
SClient = SServer.accept();
is = new DataInputStream(SClient.getInputStream());
os = new PrintStream(SClient.getOutputStream());
}catch (IOException e) {
System.out.println(e);
return false;
}
System.out.println("client connected");
return true;
}
public boolean CreateClient(String address,int port){
try {
SClient = new Socket(address, port);
} catch (UnknownHostException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
is = new DataInputStream(SClient.getInputStream());
os = new PrintStream(SClient.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
//Envoie un message
public boolean sendMsg(String msg){
msg.replace('\n',' '); // les retour a la ligne sont remplacé par des espaces
os.println(msg);
return true;
}
//Reçoit un message
public String getMsg(){
try{
return is.readLine();
}catch (IOException e){
System.out.println(e);
return null;
}
} |
voila....
est ce que ce code est bien ou pas du tout ?
J'aimerais aussi créer une interface principale sur laquelle on pourrait créer un serveur et se connecter à un serveur, est ce possible ?
Je sais que je demande beaucoup...
Merci d'avance de ceux qui auront le courage de s'attarder sur ce post et de m'aider à surmonter mon ignorance ^^