muxecho.java

来自「很棒的web服务器源代码」· Java 代码 · 共 232 行

JAVA
232
字号
// 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.htmlpackage 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();	}	        }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?