Клиентский сервер Apache MINA - PullRequest
0 голосов
/ 22 сентября 2018

Я создаю чат-сервер, используя apache NIO.Если я отправляю одно за другим сообщение клиенту -> серверу или серверу -> клиенту, то все работает правильно, но всякий раз, когда я отправляю несколько сообщений на сервер, сервер получает только первое сообщение .... Как я могу создать его, чтобы клиент мог отправлять больше сообщений?чтобы сервер и сервер получили их все ...

    package com.mina;

import java.util.Scanner;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class ClientHandler extends IoHandlerAdapter {

    @Override
    public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("In Exception Caught");

    }

    @Override
    public void inputClosed(IoSession arg0) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        System.out.println("In received" + message);
        if (session != null && message != null) {
            String retmsg = Utility.readMessageToUtility(session, message);
            System.out.println(retmsg);

            Scanner sc = new Scanner(System.in);
            String msg = sc.nextLine();
            Utility.sendMessageToUtility(session, msg);

        }

    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("   In messageSent    ");

    }

    @Override
    public void sessionClosed(IoSession arg0) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void sessionCreated(IoSession arg0) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void sessionOpened(IoSession arg0) throws Exception {
        // TODO Auto-generated method stub

    }

}

Сервер:

package com.mina;

import java.net.InetSocketAddress;
import java.`util`.HashMap;

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.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class Server implements IoHandler {
    private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(this.getClass().getName());
    HashMap<IoSession, Integer> map = new HashMap<>();

    public static void main(String[] r) throws Exception {
        Server server = new Server();
        server.connect();

    }

    public void connect() throws Exception {
        IoAcceptor acceptor = new NioSocketAcceptor();
        System.out.println(acceptor + "    acceptor");
        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        acceptor.setHandler(this);
        acceptor.getSessionConfig().setReadBufferSize(2048);
        acceptor.getSessionConfig().setIdleTime(IdleStatus.WRITER_IDLE, 2);

        acceptor.bind(new InetSocketAddress("localhost", 9081));

    }

    @Override
    public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void inputClosed(IoSession arg0) throws Exception {
        // TODO Auto-generated method stub\

    }

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        if (session != null && message != null) {

            ServerHandler serverhandler = new ServerHandler();

            map.put(session, serverhandler.messageHandler(session, message, map.get(session)));
        }

    }

    @Override
    public void messageSent(IoSession arg0, Object arg1) throws Exception {
        System.out.println("In messageSent    ");

    }

    @Override
    public void sessionClosed(IoSession arg0) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void sessionCreated(IoSession session) throws Exception {
        map.put(session, 1);

    }

    @Override
    public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void sessionOpened(IoSession session) throws Exception {

        String message = "Welcome and give your userName";
        Utility.sendMessageToUtility(session, message);

    }

}
...