Salut,

Je veux réaliser une connexion du type


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
          <---------------                        
Objet1 ---------------->  Objet2
objet1 envoie a objet2 un message
donc objet1 va appeler la fonction envoieMessage pour le port utilise par IOAacceptor de l'objet 2 (j'envoie aussi le port du serveur(IOAcceptor)de objet1) .
Quand le message arrive a objet1 j'appele dans la methode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
public void messageReceived(IoSession session, Object message)
envoieMessage avec le port du serveur (IOacceptor) de l'objet2 .
Le problème este que l 'envoi ne marche pas dans la fonction envoieMessage
je bloque dans la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 		if (!future.isConnected()) {
			return;
		}
Je sais que je peux utiliser session pour transmettre la réponse mais dans le futur objet1 va être connecte avec plusieurs objets et il devras faire la connexion entre tous les objets.



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public static void envoieMessage(String  message) {
		IoConnector connector = new NioSocketConnector();
		connector.getSessionConfig().setReadBufferSize(2048);
 
		connector.getFilterChain().addLast("logger", new LoggingFilter());
		connector.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"))));
 
		connector
				.setHandler(new MinaClientHandler(
						message));
		ConnectFuture future = connector.connect(new InetSocketAddress(
				"127.0.0.1", PORT));
		future.awaitUninterruptibly();
 
		if (!future.isConnected()) {
			return;
		}
		IoSession session = future.getSession();
		session.getConfig().setUseReadOperation(true);
		session.getCloseFuture().awaitUninterruptibly();
 
		System.out.println("After Writing");
		connector.dispose();
	}
Les trois fichiers importants dans l'application:
MinaClient.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
 
public class MinaClient {
 
	public static void main(String[] args) throws IOException,
			InterruptedException {
		envoieMessage("c_"+test+"_"+ PORT);
 
 
 
		IoAcceptor acceptor = new NioSocketAcceptor();
 
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
		acceptor.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"))));
 
		acceptor.setHandler(new MinaServerHandlerClient());
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		acceptor.bind(new InetSocketAddress(PORT));
 
 
	}
 
	public static void envoieMessage(String  message) {
		IoConnector connector = new NioSocketConnector();
		connector.getSessionConfig().setReadBufferSize(2048);
 
		connector.getFilterChain().addLast("logger", new LoggingFilter());
		connector.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"))));
 
		connector
				.setHandler(new MinaClientHandler(
						message));
		ConnectFuture future = connector.connect(new InetSocketAddress(
				"127.0.0.1", PORT_SERVER));
		future.awaitUninterruptibly();
 
		if (!future.isConnected()) {
			return;
		}
		IoSession session = future.getSession();
		session.getConfig().setUseReadOperation(true);
		session.getCloseFuture().awaitUninterruptibly();
 
		System.out.println("After Writing");
		connector.dispose();
	}
 
}
MinaServer.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
 
 
public class MinaServer {
 
 
 
	private static final int PORT =  10000;
	public static void main(String[] args) throws IOException {
 
		IoAcceptor acceptor = new NioSocketAcceptor();
 
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
		acceptor.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"))));
 
		acceptor.setHandler(new MinaServerHandler());
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		acceptor.bind(new InetSocketAddress(PORT));
	}
}
MinaServerHandler.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
public class MinaServerHandler extends IoHandlerAdapter {
	private final Logger logger = (Logger) LoggerFactory.getLogger(getClass());
 
	@Override
	public void sessionOpened(IoSession session) {
		// set idle time to 10 seconds
		session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
 
		session.setAttribute("Values: ");
	}
 
	@Override
	public void messageReceived(IoSession session, Object message) {
		logger.info("Message received in the server..");
		logger.info("Message is: " + message.toString());
		i
		if (message.toString().substring(0, 1).equals("a")){
			int PORT_SERVER = Integer.parseInt(message.toString().substring(message.toString().length()-5));
			envoieMessage("reponse", PORT_SERVER);
 
 
		}
	}
 
	@Override
	public void sessionIdle(IoSession session, IdleStatus status) {
		logger.info("Disconnecting the idle.");
		// disconnect an idle client
		session.close();
	}
 
	@Override
	public void exceptionCaught(IoSession session, Throwable cause) {
		// close the connection on exceptional situation
		session.close();
	}
 
	@Override
	public void sessionClosed(IoSession session) {
 
	}
 
 
	public static void emvoieMessage(String  message,int PORT_SERVER) {
		IoConnector connector = new NioSocketConnector();
		connector.getSessionConfig().setReadBufferSize(2048);
 
		connector.getFilterChain().addLast("logger", new LoggingFilter());
		connector.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"))));
 
		connector
				.setHandler(new MinaClientHandler(
						message));
		ConnectFuture future = connector.connect(new InetSocketAddress(
				"127.0.0.1", PORT_SERVER));
		future.awaitUninterruptibly();
 
 
		if (!future.isConnected()) {
			// le probleme este l'application rentre dans cette condition
			return;
		}
		IoSession session = future.getSession();
		session.getConfig().setUseReadOperation(true);
		session.getCloseFuture().awaitUninterruptibly();
 
		System.out.println("After Writing");
		connector.dispose();
	}
}
Merci pour votre patience, et désolé pour ma mauvaise exprimation.