Package org.w3c.www.mux.tests

Source Code of org.w3c.www.mux.tests.EchoClient

// MuxEcho.java
// $Id: MuxEcho.java,v 1.6 2000/08/16 21:38:02 ylafon Exp $
// (c) COPYRIGHT MIT and INRIA, 1996.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.www.mux.tests;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;

import java.net.ServerSocket;
import java.net.Socket;

import org.w3c.www.mux.MuxSession;
import org.w3c.www.mux.MuxStream;
import org.w3c.www.mux.MuxStreamHandler;

class EchoServerStreamHandler implements MuxStreamHandler {

    public boolean acceptSession(MuxStream stream, int sessid, int protid) {
  System.out.println("EchoServerStreamHandler: accept "
         + sessid
         + " for protocol "
         + protid);
  return true;
    }

    public void notifySession(MuxSession session) {
  try {
      new EchoServerHandler(session);
  } catch (Exception ex) {
      System.out.println("EchoServerStreamHandler: error !");
      ex.printStackTrace();
  }
    }

}

// EchoServerHandler is the one handling the "echo" protocol
// One instance runs per MuxSession on a single MuxStream.

class EchoServerHandler extends Thread {
    MuxSession   ses = null;
    InputStream  in  = null;
    OutputStream out = null;

    public void run() {
  byte buffer[] = new byte[1024];
  int  got      = -1;
  System.out.println(this+": now running !");
  try {
      while ((got = in.read(buffer, 0, buffer.length)) >= 0) {
    System.out.println("< "
                                   + this
           + " ["+new String(buffer, 0, 0, got)+"]");
    out.write(buffer, 0, got);
    out.flush();
      }
  } catch (Exception ex) {
      System.out.println(this+": fatal error, aborting.");
      ex.printStackTrace();
  }
    }

    public EchoServerHandler(MuxSession ses)
  throws IOException
    {
  this.ses = ses;
  this.in  = ses.getInputStream();
  this.out = ses.getOutputStream();
  setName("Echo@"+ses.getIdentifier());
  start();
    }

}

// The EchoServer is the one accepting new incomming connections:

class EchoServer extends Thread {
    ServerSocket            socket = null;
    EchoServerStreamHandler handler = null;
    int port = -1;

    public void run() {
  try {
      while(true) {
    System.out.println("EchoServer@localhost:"+port+": accept.");
    Socket client = socket.accept();
    new MuxStream(true, handler, client);
      }
  } catch (Exception ex) {
      System.out.println("EchoServer: fatal error !");
      ex.printStackTrace();
  }
    }

    EchoServer(int port)
  throws IOException
    {
  this.handler = new EchoServerStreamHandler();
  this.socket  = new ServerSocket(port);
  this.port    = port;
  this.start();
    }
}

class EchoClient extends Thread {
    static Socket    socket = null;
    static MuxStream stream = null;
    String msg = null;
    InputStream in=null;
    OutputStream out =null;
    MuxSession ses = null;
    int id =-1;
    int repeat = -1;

    public void run() {
  byte buffer[] = new byte[1024];
  int  msgid    = 0;
  try {
      while((repeat < 0) || (repeat != 0)) {
    String m = "["+id+"]"+(msgid++)+"/"+msg;
    m.getBytes(0, m.length(), buffer, 0);
    out.write(buffer, 0, m.length());
    out.flush();
    int got = in.read(buffer, 0, buffer.length);
    System.out.println("> "
                                   + this
           + " ["+new String(buffer, 0, 0, got)+"]");
    if ( repeat > 0 )
        repeat--;
      }
      out.close();
  } catch (Exception ex) {
      System.out.println(this+": failed.");
      ex.printStackTrace();
  }
    }

    public static void makeClients(String host, int port
           , int count
           , int repeat
           , String msg)
  throws IOException
    {
  // Init if needed:
  if ( socket == null ) {
      socket = new Socket(host, port);
      stream = new MuxStream(false, null, socket);
  }
  // Start as many echo sessions as needed:
  while (--count >= 0)
      new EchoClient(stream, count, repeat, msg);
    }

    EchoClient(MuxStream stream, int id, int repeat, String msg)
  throws IOException
    {
  this.ses    = stream.connect(7);
  this.in     = ses.getInputStream();
  this.out    = ses.getOutputStream();
  this.msg    = msg;
  this.id     = id;
  this.repeat = repeat;
  setName("client/"+id);
  start();
    }
}

public class MuxEcho {

    public static void usage() {
  System.out.println("-s (server) -p port");
  System.out.println("-c (client) -m msg -h server -p port -n count -r repeat");
    }

    public static void main(String args[]) {
  boolean server = false;
  String host = null;
  String msg = null;
  int port = 5001;
  int count = 2;
  int repeat = 0;

  for (int i = 0 ; i < args.length ; i++) {
      if ( args[i].equals("-s") ) {
    server = true;
      } else if (args[i].equals("-c") ) {
    server = false;
      } else if (args[i].equals("-m")) {
    msg = args[++i];
      } else if (args[i].equals("-h") ) {
    host = args[++i];
      } else if (args[i].equals("-p")) {
    try {
        port = Integer.parseInt(args[++i]);
    } catch (Exception ex) {
        usage();
    }
      } else if (args[i].equals("-n")) {
    try {
        count = Integer.parseInt(args[++i]);
    } catch (Exception ex) {
        usage();
    }
      } else if (args[i].equals("-r")) {
    try {
        repeat = Integer.parseInt(args[++i]);
    } catch (Exception ex) {
        usage();
    }
      } else {
    usage();
      }
  }
  try {
      if ( server ) {
    new EchoServer(port);
      } else {
    EchoClient.makeClients(host, port, count, repeat, msg);
      }
  } catch (Exception ex) {
      ex.printStackTrace();
  }
     

    }

}
TOP

Related Classes of org.w3c.www.mux.tests.EchoClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.