Leandro Casadei a écrit :
On Fri, Jan 15, 2010 at 2:54 PM, Emmanuel Lécharny <[email protected]>wrote:
Where in your code is the disconnect() method called ?
It's called somewhere else.
Not very helpful ;)
The same place where connect() is called.
The code i've posted is a piece of a client application that is used by
another application.
Can you tests this simple code (there are two classes, a server and a
client), launching the server then the client, which should exit
immediately ? (note that you'll have to add the slf4j and mina-cor jars)
If it works, then just try to see in your code if you are using the same
template.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.root1.minatest;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
/**
*
* @author ACHR
*/
public class Server implements IoHandler {
public void sessionCreated(IoSession is) throws Exception {
System.out.println("Server sessionCreated("+is+")");
}
public void sessionOpened(IoSession is) throws Exception {
System.out.println("Server sessionOpened("+is+")");
}
public void sessionClosed(IoSession is) throws Exception {
System.out.println("Server sessionClosed("+is+")");
}
public void sessionIdle(IoSession is, IdleStatus is1) throws Exception {
System.out.println("Server sessionIdle("+is+", "+is1+")");
}
public void exceptionCaught(IoSession is, Throwable thrwbl) throws
Exception {
System.out.println("Server exceptionCaught("+is+", "+thrwbl+")");
}
public void messageReceived(IoSession is, Object o) throws Exception {
System.out.println("Server messageReceived("+is+", "+o+")");
// reply msg
is.write(o.toString()+"\r\n");
}
public void messageSent(IoSession is, Object o) throws Exception {
System.out.println("Server messageSent("+is+", "+o+")");
}
private static final int PORT = 9123;
public static void main(String[] args) throws IOException {
Server server = new Server();
IoAcceptor acceptor = new NioSocketAcceptor();
((NioSocketAcceptor)acceptor).setReuseAddress( true );
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
acceptor.getFilterChain().addLast( "codec", new
ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8"
))));
acceptor.setHandler( server );
acceptor.getSessionConfig().setReadBufferSize( 2048 );
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
acceptor.bind( new InetSocketAddress(PORT) );
System.out.println("Server running ...");
}
}
and
package de.root1.minatest;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
* Hello world!
*
*/
public class Client implements IoHandler {
public void sessionCreated(IoSession is) throws Exception {
System.out.println("client sessionCreated("+is+")");
}
public void sessionOpened(IoSession is) throws Exception {
System.out.println("client sessionOpened("+is+")");
}
public void sessionClosed(IoSession is) throws Exception {
System.out.println("client sessionClosed("+is+")");
}
public void sessionIdle(IoSession is, IdleStatus is1) throws Exception {
System.out.println("client sessionIdle("+is+", "+is1+")");
}
public void exceptionCaught(IoSession is, Throwable thrwbl) throws
Exception {
System.out.println("client exceptionCaught("+is+", "+thrwbl+")");
}
public void messageReceived(IoSession is, Object o) throws Exception {
System.out.println("client messageReceived("+is+", "+o+")");
}
public void messageSent(IoSession is, Object o) throws Exception {
System.out.println("client messageSent("+is+", "+o+")");
}
public static void main(String[] args) {
Client client = new Client();
final NioSocketConnector connector = new NioSocketConnector();
// Set connect timeout.
connector.setConnectTimeoutMillis(30 * 1000L);
connector.setHandler(client);
connector.getFilterChain().addLast( "logger", new LoggingFilter() );
connector.getFilterChain().addLast( "codec", new
ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8"
))));
// Start communication.
System.out.println( "Connection ..." );
ConnectFuture cf = connector.connect(new
InetSocketAddress("localhost", 9123));
System.out.println( "Waiting for conection to achieve ..." );
cf.awaitUninterruptibly();
System.out.println( "Connected !!!" );
// send a message
System.out.println( "Writing message ..." );
cf.getSession().write("Hello World!\r\n");
System.out.println( "Message written !!!" );
// Get the close future for this session
CloseFuture closeFuture = cf.getSession().getCloseFuture();
closeFuture.addListener((IoFutureListener<?>) new
IoFutureListener<IoFuture>() {
@Override
public void operationComplete(IoFuture future) {
System.out.println("managed session count=" +
connector.getManagedSessionCount());
}
});
// wait for session close and then dispose the connector
System.out.println( "Closing the session..." );
closeFuture.getSession().close(false);
System.out.println( "Waiting for the session to be closed..." );
closeFuture.awaitUninterruptibly();
System.out.println( "Session closed !!!" );
System.out.println("Disposing connector ...");
connector.dispose();
System.out.println("Disposing connector ... *finished*");
}
}
--
Regards,
Cordialement,
Emmanuel Lécharny
www.nextury.com