package junit.util; import java.net.InetSocketAddress; import java.nio.charset.Charset; import java.util.concurrent.Executors; import org.apache.mina.core.RuntimeIoException; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.executor.ExecutorFilter; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.SocketConnector; import org.apache.mina.transport.socket.nio.NioSocketConnector; /** * NIO Test client * * @author De Oliveira Edouard <doe_wanted@yahoo.fr> */ public class SMTPClient { private static final String HOSTNAME = "127.0.0.1"; private static final int PORT = 25; private static final int CONNECT_TIMEOUT = 30000; // 30 secs in ms private static final int MAX_THREADS = 3000; public static void main(String[] args) throws Throwable { IoBuffer.setUseDirectBuffer(false); IoBuffer.setAllocator(new SimpleBufferAllocator()); SocketConnector connector = new NioSocketConnector(Runtime.getRuntime().availableProcessors() + 1); // Configure the service. connector.setConnectTimeoutMillis(CONNECT_TIMEOUT); connector.getFilterChain().addLast("threadPool", new ExecutorFilter(Executors.newFixedThreadPool(MAX_THREADS))); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); connector.getFilterChain().addLast("logger", new LoggingFilter()); SMTPSessionHandler handler = new SMTPSessionHandler("localhost"); connector.setHandler(handler); while (true) { try { for (int i = 0; i < 10; i++) connector.connect(new InetSocketAddress(HOSTNAME, PORT)); Thread.sleep(100); } catch (RuntimeIoException e) { System.err.println("Failed to connect."); e.printStackTrace(); Thread.sleep(1000); } } } }