package net.sourceforge.jsocks.test; import java.net.*; import java.io.*; /** Plain SOCKS unaware echo client.*/ public class Echo implements Runnable{ private int port; private InetAddress peerIp; private Socket ss; private InputStream in; private OutputStream out; private static final int BUF_SIZE = 1024; public Echo(String host,int port,String peerHost,int peerPort) throws IOException,UnknownHostException{ this.peerIp = InetAddress.getByName(peerHost); this.port = port; ss = new Socket(host, port,peerIp,peerPort); out = ss.getOutputStream(); in = ss.getInputStream(); System.out.println("Connected..."); System.out.println("TO: "+host+":"+port); System.out.println("LocalAddress: "+ss.getLocalAddress().getHostAddress() +":"+ss.getLocalPort()); } public Echo(String host,int port) throws IOException,UnknownHostException{ System.out.println("Connecting..."); ss = new Socket(host, port); out = ss.getOutputStream(); in = ss.getInputStream(); System.out.println("TO: "+host+":"+port); System.out.println("LocalAddress: "+ss.getLocalAddress().getHostAddress() +":"+ss.getLocalPort()); } public void send(String s) throws IOException{ //System.out.println("Sending:"+s); out.write(s.getBytes()); } public void run(){ byte[] buf = new byte[1024]; int bytes_read; try{ while((bytes_read = in.read(buf)) > 0){ System.out.write(buf,0,bytes_read); System.out.flush(); } }catch(IOException io_ex){ io_ex.printStackTrace(); } } public static void usage(){ System.err.print( "Usage: java Echo host port [peerHost peerPort]\n"); } public static void main(String args[]){ int port; String host,peerHost; int peerPort; Echo echo = null; if(args.length > 1){ try{ host = args[0]; port = Integer.parseInt(args[1]); if(args.length ==4){ peerHost = args[2]; peerPort =Integer.parseInt(args[3]); echo = new Echo(host,port,peerHost,peerPort); }else{ echo = new Echo(host,port); } Thread thread = new Thread(echo); thread.start(); BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String s; s = in.readLine(); Thread.currentThread().setPriority(Thread.NORM_PRIORITY); while(s != null){ echo.send(s+"\r\n"); s = in.readLine(); } }catch(IOException io_ex){ io_ex.printStackTrace(); System.exit(1); }catch(NumberFormatException num_ex){ usage(); num_ex.printStackTrace(); System.exit(1); }finally{ if(echo!=null) try{echo.ss.close();}catch(Exception e){} } }else{ usage(); } } }//End of class