Ceci est un exemple de base de serveur TCP. Ce serveur ne fait rien, à vous de coder la partie manquante (traitement).
class ServeurTcp {
void servir(int noPort) {
try {
ServerSocket serveur = new ServerSocket(noPort);
/*
* La variable "enService" contrôle la boucle principale du serveur
* qui se termine avec l'application. À vous de trouver une façon
* d'en changer la valeur.
*/
boolean enService = true;
while (enService) {
/*
* Le programme est ici bloqué dans l'attente d'une connexion. La
* connexion aura pour effet de créer un socket (variable "client")
* branché à l'application distante.
*/
Socket client = serveur.accept();
/*
* Création des flux d'entrée-sortie pour échanger de l'information
* avec le client en format binaire. On utilisera (mais il peut y
* en avoir d'autres plus appropriées) les méthodes "readByte" pour
* lire et "writeByte" pour écrire.
*
*
* DataInputStream in =
* new DataInputStream(client.getInputStream());
*
* DataOutputStream out =
* new DataOutputStream(client.getOutputStream());
*/
/*
* Création des flux d'entrée-sortie pour échanger de l'information
* avec le client en format texte. On utilisera les méthodes
* "readLine" pour lire et "println" pour écrire.
*/
BufferedReader reader =
new BufferedReader(
new InputStreamReader(client.getInputStream()));
PrintWriter writer =
new PrintWriter(
new OutputStreamWriter(client.getOutputStream()));
/*
* La variable "fini" contrôle la boucle secondaire, celle qui se
* se termine avec la déconnexion d'un client. À vous de trouver
* une façon d'en changer la valeur.
*/
boolean fini = false;
while (!fini) {
/*
* Traitement (lecture des requêtes du client et écriture des
* réponses du serveur).
*/
}
/*
* Libération des ressources à la fin du traitement d'un client.
*/
reader.close();
writer.close();
client.close();
}
serveur.close();
} catch (IOException ioe) {
/*
* Ici on choisit de quitter l'application, mais il y aurait peut-être
* moyen de traiter l'exception.
*/
System.err.println("Erreur d'entre-sortie");
System.exit(1);
}
}
/*
* Point d'entrée de l'application, cette méthode fait trois choses :
* 1) valide les paramètres de la ligne de commande;
* 2) crée une instance de la classe courante;
* 3) appelle une méthode de l'objet pour démarrer le traitement.
*/
public static void main(String[] args) {
switch (args.length) {
case 0:
System.err.println("Vous devez specifier un numero de port");
break;
case 1:
try {
int noPort = Integer.parseInt(args[0]);
if ((noPort >= 0) && (noPort <= 65537)) {
new ServeurTcp().servir(noPort);
} else {
System.err.println("Le numero de port est hors intervale");
}
} catch (NumberFormatException nfe) {
System.err.println(
"Le numero de port doit etre un nombre entier");
}
break;
default:
System.err.println("Il y a trop de parametres");
break;
}
}
}