001 package org.crsh.util;
002
003 import java.io.Closeable;
004 import java.io.IOException;
005 import java.io.InputStream;
006 import java.io.OutputStream;
007 import java.net.InetSocketAddress;
008 import java.net.Socket;
009
010 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
011 public abstract class AbstractSocketClient implements Closeable {
012
013 /** . */
014 private int port;
015
016 /** . */
017 private Socket socket;
018
019 /** . */
020 private InputStream in;
021
022 /** . */
023 private OutputStream out;
024
025 public AbstractSocketClient(int port) {
026 this.port = port;
027 }
028
029 public final void connect() throws IOException {
030 Socket socket = new Socket();
031 socket.connect(new InetSocketAddress(port));
032 InputStream in = socket.getInputStream();
033 OutputStream out = socket.getOutputStream();
034
035 //
036 this.socket = socket;
037 this.in = in;
038 this.out = out;
039
040 //
041 handle(in ,out);
042 }
043
044 protected abstract void handle(InputStream in, OutputStream out) throws IOException;
045
046 public final void close() {
047 try {
048 Safe.close(socket);
049 Safe.close(in);
050 Safe.close(out);
051 }
052 finally {
053 this.socket = null;
054 this.in = null;
055 this.out = null;
056 }
057 }
058 }