EchoStreamClient.java

package fr.umlv.ji.tcp;
import java.io.*;
import java.nio.*;
import java.net.*;
import java.nio.channels.*;
import java.nio.charset.*;
/**
 * Un client Echo pour le protocole TCP.
 */
public class EchoStreamClient {
  /** Méthode d'interrogation du serveur. */
  public static void main(String[] args) throws IOException {
    if (args.length!=3) {
      usage();
      System.exit(1);
    }
    SocketAddress server = null;
    try {
      int port = Integer.parseInt(args[1]);
      server = new InetSocketAddress(args[0],port);
    } catch(NumberFormatException e) {
      usage();
      System.exit(1);
    }
    // Récupérer un nouveau canal
    SocketChannel sc = SocketChannel.open();
    try {
      // Connexion du canal au serveur
      sc.connect(server);
      // Récupération du codage natif
      String code = new OutputStreamWriter(System.out).getEncoding();
      // Création des données à envoyer
      ByteBuffer byteB = Charset.forName(code).encode(args[2]);
      // Envoi des données
      sc.write(byteB);
      // Allocation d'un tampon de réception de taille des données émises
      int size = byteB.limit();
      byteB = ByteBuffer.allocate(size);
      // Réception de toutes les données
      while (byteB.hasRemaining())
    sc.read(byteB);
      // Préparation des données pour l'affichage
      byteB.flip();
      // Affichage des données reçues
      WritableByteChannel out = Channels.newChannel(System.out);
      out.write(byteB);
    } finally { sc.close(); }
  }
  public static void usage() {
    System.err.println("Usage: " +
      "java fr.umlv.ji.tcp.EchoStreamClient <server> <port> <message>");
  }
}