网络编程mina介绍

博客提及Mina和Netty为同一作者,并给出服务器和客户端代码。先介绍添加依赖,展示了server代码及MyHandler.java代码,资料来源于网上指定链接。

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

mina和netty是同一个作者:向作者致敬!

服务器代码:

首先添加依赖:

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.rxtx</groupId>
            <artifactId>rxtx</artifactId>
            <version>2.1.7</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mina</groupId>
            <artifactId>mina-core</artifactId>
            <version>2.0.7</version>
        </dependency>

server的代码:

package com.mina;
 
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecException;
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 MinaServer {
	static int PORT = 7080;
	static IoAcceptor accept = null; // 提供服务端实现
 
	public static void main(String[] args) {
		try {
			accept = new NioSocketAcceptor();
			// 设置过滤器
			accept.getFilterChain().addLast(
					"codec",
					new ProtocolCodecFilter(new TextLineCodecFactory(Charset
							.forName("UTF-8"),
							LineDelimiter.WINDOWS.getValue(),
							LineDelimiter.WINDOWS.getValue())));
 
			// 设置缓冲区
			accept.getSessionConfig().setReadBufferSize(1024);// 大小
			accept.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);// 时间10s
			accept.setHandler(new MyHandler());// 业务
			accept.bind(new InetSocketAddress(PORT));// 绑定端口并启动
			System.out.println("Server ->" + PORT);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

MyHandler.java:

 

package com.mina;
 
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
 
public class MyHandler extends IoHandlerAdapter{
 
	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		System.out.println("exceptionCaught:" + "连接出现异常"); 
	}
 
	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String msg = (String)message;
		System.out.println("服务端接收到数据:" + msg);
		Date date = new Date();
		session.write(date); // 用于写入数据并发送
	}
 
	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		System.out.println("messageSent:" + "发送数据"); 
	}
 
	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("sessionClosed:" + "session关闭");
	}
 
	@Override
	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("sessionCreated:" + "创建Session");
	}
 
	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		System.out.println("sessionIdle:" + "处于多长时间是空闲状态"); 
	}
 
	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("sessionOpened:" + "打开Session用于读写数据"); 
	}
 
}

客户端代码:

package com.mina;
 
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
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.NioSocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
 
/**
 * Mina客户端
 * @author lenovo
 *
 */
public class MinaClient {
	private static String host = "127.0.0.1";
	private static int port = 7080;
	public static void main(String[] args) {
		IoSession session = null;
		IoConnector connector = new NioSocketConnector();// 提供客户端实现
		connector.setConnectTimeout(3000);// 设置超时时间
		// 设置过滤器(编码和解码)
		connector.getFilterChain().addLast("coderc", new ProtocolCodecFilter(
				new TextLineCodecFactory(Charset.forName("UTF-8"),
						LineDelimiter.WINDOWS.getValue(),
						LineDelimiter.WINDOWS.getValue())));
		// 业务处理
		connector.setHandler(new MyClientHandler());
		// 设置session属性,获取服务端连接
		ConnectFuture future = connector.connect(new InetSocketAddress(host,port));
		future.awaitUninterruptibly();// 等待我们的连接
		session = future.getSession();
		session.write("你好!Hello");// 写入数据,发往服务端
		session.getCloseFuture().awaitUninterruptibly();// 等待关闭连接
		connector.dispose();// 释放资源
	}
}

资料来自网上:https://blog.youkuaiyun.com/wang_snake/article/details/79495855

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值