Salut,
Je veux réaliser une connexion du type
objet1 envoie a objet2 un message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <--------------- Objet1 ----------------> Objet2
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 methodeenvoieMessage avec le port du serveur (IOacceptor) de l'objet2 .
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void messageReceived(IoSession session, Object message)
Le problème este que l 'envoi ne marche pas dans la fonction envoieMessage
je bloque dans la ligne
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 if (!future.isConnected()) { return; }
Les trois fichiers importants dans l'application:
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(); }
MinaClient.java
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
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(); } }
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 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)); } }
Merci pour votre patience, et désolé pour ma mauvaise exprimation.
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(); } }
Partager