java MinaServer

本文详细介绍了MinaServer类如何通过NioSocketAcceptor实现TCP网络连接管理,包括配置连接参数和绑定端口等步骤。同时,MinaSessionHandler作为IO处理器适配器,负责接收、处理和发送客户端消息,实现客户端与服务器之间的双向通信。本文深入探讨了服务器端如何响应客户端请求,并通过日志记录、错误处理和状态更新等功能确保网络连接的稳定性和高效性。

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

package com.MinaServer;


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


import org.apache.mina.core.session.IdleStatus;
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;


import com.MinaService.MinaSessionHandler;


public class MinaServer implements Runnable{


/**
* 网络连接管理器构造方法,开启TCP网络连接线程
*/
public MinaServer() {
new Thread(this).start();
}

public static void createServer(){
NioSocketAcceptor acceptor = new NioSocketAcceptor(1);
acceptor.getFilterChain().addLast("Logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
acceptor.setHandler(new MinaSessionHandler());
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setReceiveBufferSize(2048);
acceptor.getSessionConfig().setSendBufferSize(4096);
acceptor.getSessionConfig().setTcpNoDelay(true);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
try {
acceptor.bind(new InetSocketAddress(9888));
} catch (IOException e) {
e.printStackTrace();
}
}


/**
* 关闭网络
*/
public void stopNetwork() {
return;
}

@Override
public void run() {

}

}







package com.MinaService;


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


public class MinaSessionHandler extends IoHandlerAdapter{



@Override
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("-------------服务端接收到的客户端发送的消息(服务器端)-------------:" + message);
super.messageReceived(session, message);
session.write(message);
}


@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
if (session.isConnected()) {
session.close(true);
}
System.out.println("-------------抛出异常(服务器端)-------------");
}


@Override
public void messageSent(IoSession session, Object message) throws Exception {
session.write("-----------------返给客户端的消息:我已收到你传来的消息(服务器端)-------------" + message.toString());
System.out.println("-------------服务端向客户端发送消息(服务器端)-------------" + message.toString());
}


@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
System.out.println("-------------session关闭(服务器端)-------------");
}


@Override
public void sessionCreated(IoSession session) throws Exception {
session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30000);
System.out.println("-------------创建消息(服务器端)-------------");
}


@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
session.close(true);
System.out.println("-------------闲时触发(服务器端)-------------");
}


@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
System.out.println("-------------创建链接(服务器端)-------------");
}





}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值