Journal Source Client

Posté par  .
Étiquettes : aucune
0
15
déc.
2003
/**
* Chat avance Java.
* 27.10.2003
* @author Remi Wipliez && Raphael Mariage
* @version 0.0
*/

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.lang.Thread;


public class ClientUDP {

static int lg, serv_port, taille_buff=10240, test = 1;
static String address_serv, receive, chaine, login= "", mdp, mdp2, newcl, mess, passcrypte, log;
static String[] info = new String[2];
static DatagramPacket dp;
static DatagramSocket ds;
static BufferedReader kbr;
static boolean not_connected = true;
static byte[] buffer = new byte[taille_buff];
static InetAddress adr;

public static void main(String [] args) {
/* on commence la detection des arguments
* avec comme arguments possibles, l'addresse
* du serveur et le port */

lg = args.length;
if (lg != 0) {
for (int i=0;i<lg;i++) {
if (args[i].charAt(0) == '-') {
try {
switch(args[i].charAt(1)) {
case 'p': {
serv_port = Integer.parseInt(args[i+1]);
break;
}
case 's': {
address_serv = args[i+1];
break;
}
default:{
System.out.println("Option inconnue : " + args[i]);
System.out.println("Options possibles : ");
System.out.println("-p : definir un port ");
System.out.println("-s : definir adresse du serveur");
System.exit(0);
}
}
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Argument manquant...");
System.exit(0);
}
}
}
}
else {
/* adresse et port par defaut */
address_serv = "localhost";
serv_port = 2222;
}

/* Fin de la detection des arguments */
ds = ConnectUDP.dsocket(0);
System.out.println("Identification");
while (login.length() == 0) {
System.out.println("Nickname (10 caracteres max) : ");
System.out.println("Si vous ne vous etes jamais connecte, tapez new + votre login");
kbr = new BufferedReader(new InputStreamReader(System.in));
try {
login = kbr.readLine();
if (login.length() != 0) {
if (login.substring(0,3).equals("new")) {
login = login.substring(4,login.length());
mess = "new" + "@> @" + login;
buffer = mess.getBytes();
}
else
buffer = login.getBytes();
adr = InetAddress.getByName(address_serv);
dp = ConnectUDP.dpacket(buffer, buffer.length, adr, serv_port);
ConnectUDP.envoi(ds, dp, adr, serv_port);
break;
}
else {
System.out.println("login nul");
System.out.println("veuillez entrer un login correct");
}
}
catch(java.io.IOException e) {
System.out.println("erreur IO");
}
}

/* procedure d'identification et de connexion au server
* la connexion est autoris?e par la reception de la chaine "ok" lorsque l'identification est valide
* c'est a dire bon pass, nouvelle inscription correcte...*/

log = login;
login = Identification.Identification(log, adr, serv_port, ds);


System.out.println("Bienvenue " + login + " !");
System.out.println("Version du 09/12/2003");
System.out.println("Nouvelles fonctionnalit?s disponibles...");
System.out.println("Tapez /help pour une liste des commandes...");

/* 2 threads, un d'ecoute des reponse du server
* l'autre pour envoyer des messages au server */
new Sendmess(address_serv, serv_port, login, ds);
new Ecoute(ds, serv_port, address_serv, test, login);
}
}

class Sendmess extends Thread {

private String sentMessage="";
private BufferedReader kbr;
private InetAddress S_ia;
private String adr, mess, login, newnick;
private int ports;
private DatagramPacket dp;
private DatagramSocket ds;
static boolean chang_run;

public Sendmess(String address_serv, int serv_port, String log, DatagramSocket datas) {
adr = address_serv;
ports = serv_port;
login = log;
ds = datas;
start();
}

public void run() {

/* on se mets en attente de message tant que le client ne dit pas qu'il veut quitter */
while(!sentMessage.equals("/exit")) {

kbr = new BufferedReader(new InputStreamReader(System.in));
try {
sentMessage = kbr.readLine();
S_ia = InetAddress.getByName(adr);
}
catch(java.io.IOException e) {
System.out.println("erreur IO");
}
String cmde="";
String mess="";
int index = 0;

/* on detecte si c'est une commande afin de pouvoir surtout reperer le changement de login,
* qui doit se faire apres l'enoie de la commande /nick */
if (sentMessage.charAt(0) == '/') {
while (sentMessage.charAt(index) != ' ') {
cmde = cmde + sentMessage.charAt(index);
index ++;
if (index == sentMessage.length())
break;
}
}

/* si on chnage de pseudo, on recupere le nouveau */
if (cmde.equals("/nick"))
newnick = sentMessage.substring(6, sentMessage.length());
index = 0;
mess = login + "@> @" + sentMessage;
byte [] buffer = mess.getBytes();
dp = ConnectUDP.dpacket(buffer, mess.length(), S_ia, ports);
ConnectUDP.envoi(ds, dp, S_ia, ports);

/* si l'utilisateur a decide de changer, on l'a deja dit au server, dc on effectue le changement */
if (cmde.equals("/nick"))
login = newnick;
if (cmde.equals("/passwd")) {
try {
Ecoute.sleep(100);
}
catch(java.lang.InterruptedException f) {
System.out.println("erreur pause");
}
chang_run = true;
Identification.chang(login, S_ia, ports, ds);
chang_run = false;
}

}
System.exit(0);
}
}

class Ecoute extends Thread {

static private DatagramSocket datas;
static private DatagramPacket datap;
static private int taille_buff = 10240;
static int sport, oktorun;
static String adrs, reponse, login;
static InetAddress S_ia;


public Ecoute(DatagramSocket ds, int port, String adr, int test, String log) {
login = log;
oktorun = test;
datas = ds;
sport = port;

try {
S_ia = InetAddress.getByName(adr);
}
catch(java.io.IOException e) {
System.out.println("erreur IO");
}
start();
}

public void run() {

while(oktorun != 0) {
byte buff_rep[] = new byte[taille_buff];
DatagramPacket dp = ConnectUDP.dpacket(buff_rep, taille_buff, S_ia, sport);
reponse = ConnectUDP.recep(datas, dp);
//System.out.println("Ecoute a recu " + reponse);
if (reponse.equals("kickage")) {
System.out.println("vous avez ete ejecte du server par l'administrateur");
System.exit(0);
}
else
if (!Sendmess.chang_run)
System.out.println(reponse);
// reponse = "";
}
}
}

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.