Mina入门演示例子(简单登陆验证)

本文详细介绍了使用Java Mina框架构建一个简单的登录系统客户端和服务端的过程,包括网络连接、消息编码解码、客户端发送登录请求及服务器验证登录信息等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//包含四个类,客户端两个+服务器两个
//LoginClient.java,LoginClientHandler.java,LoginServer.java,LoginServerHandler.java

//login客户端代码
package com.mina.day3;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.log4j.Logger;

import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;

import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class LoginClient {

private static Logger logger = Logger.getLogger(LoginClient.class);
private static String HOST = "127.0.0.1";
private static int PORT = 3005;

public static void main(String[] args) {
IoConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(3000);
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())
));

connector.setHandler(new LoginClientHandler());
IoSession session = null;

try {
ConnectFuture future = connector.connect(new InetSocketAddress(HOST, PORT));

future.awaitUninterruptibly();
session = future.getSession();
session.write("admin,3");
} catch (Exception e) {
logger.error("connecting error...", e);
}
session.getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}

//客户端处理器代码
package com.mina.day3;

import org.apache.log4j.Logger;

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

public class LoginClientHandler extends IoHandlerAdapter {

private static Logger logger = Logger.getLogger(LoginClientHandler.class);

@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// message from server
String msgFServer = message.toString();
logger.info("client received msg = " + msgFServer);
}

}

//服务器端LoginServer.java
package com.mina.day3;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.log4j.Logger;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class LoginServer {

private static Logger logger = Logger.getLogger(LoginServer.class);
private static int PORT = 3005;

public static void main(String[] args) {
IoAcceptor acceptor = null;
try {
acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())
));

acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

acceptor.setHandler(new LoginServerHandler());

acceptor.bind(new InetSocketAddress(PORT));
logger.info("server startup ok,port = "+PORT);
} catch (Exception e) {
logger.error("server startup error...", e);
e.printStackTrace();
}
}

}

//服务器处理器代码
package com.mina.day3;

import org.apache.log4j.Logger;

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

public class LoginServerHandler extends IoHandlerAdapter {

public static Logger logger = Logger.getLogger(LoginServerHandler.class);

@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String resultMsg = message.toString();
logger.info("server received msg = "+resultMsg);

if ("bye".equals(resultMsg)) {
session.close(true);
}

//简单模拟业务逻辑处理
String[] userInfo = resultMsg.split(",");
String username = userInfo[0];
String password = userInfo[1];

if (username.equals("admin") && password.equals("3")) {
session.write("login success...");
} else {
session.write("login error...");
}
}

@Override
public void messageSent(IoSession session, Object message) throws Exception {
// longlived connection
logger.info("message sent success...");
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值