//服务端程序
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
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.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;
/**
*
* @author user
*/
public class MyServer {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
// TODO code application logic here
//IoAcceptor for socket transport (TCP/IP). This class handles incoming TCP/IP based socket connections.
IoAcceptor accpter=new NioSocketAcceptor();
accpter.getSessionConfig().setReadBufferSize(2048);//设置读取数据的缓冲区大小
accpter.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);//读写通道均在 10 秒内无任何操作就进入空闲状态
//设置编码 addLast(Stringname, IoFilterfilter)
//name
- The filter's name
//filter
- The filter to add
accpter.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(
Charset.forName("UTF-8")
//,LineDelimiter.WINDOWS.getValue(),
//LineDelimiter.WINDOWS.getValue()
) ));
accpter.setHandler(new MyIoHandler());//IoHandler 注册到 IoService
accpter.bind(new InetSocketAddress(9123));//绑定端口号
}
}
//编写IoHandler
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author user
*/
public class MyIoHandler extends IoHandlerAdapter{
// 这里我们使用的SLF4J作为日志门面,至于为什么在后面说明。
private final static Logger log = LoggerFactory.getLogger(MyIoHandler.class);
//收到客户端消息,当前方法就会执行
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println(message.toString());
String str = message.toString();
log.info("The message received is [" + str + "]");
if (str.endsWith("quit")) {
session.close(true);
return;
}
}
}
//客户端程序
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoConnector;
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;
/**
*
* @author user
*/
public class MyClient {
public static void main(String[] args){
IoConnector connector=new NioSocketConnector();
connector.setConnectTimeoutMillis(30000);
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
new TextLineCodecFactory(
Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue()
)
)
);
connector.setHandler(new ClientHandler("你好\r\nHello World"));;
connector.connect(new InetSocketAddress("127.0.0.1", 9123));
}
}
//编写IoHandler
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author user
*/
public class ClientHandler extends IoHandlerAdapter{
private final static Logger LOGGER = LoggerFactory .getLogger(ClientHandler.class);
private final String values;
public ClientHandler(String values) {
this.values = values;
}
//当连接服务器是,向服务器发送消息
@Override
public void sessionOpened(IoSession session) {
session.write(values);
}
}
分享到:
相关推荐
总之,这个Java NIO IM实例是一个很好的学习资源,它演示了如何利用NIO进行高效的网络通信。通过深入理解并实践这个示例,开发者可以更好地掌握Java NIO的核心概念和技术,并将其应用于实际项目中,提升系统的性能和...
jaca视频教程 jaca游戏服务器端开发 Netty NIO AIO Mina视频教程 课程目录: 一、Netty快速入门教程 01、第一课NIO 02、第二课netty服务端 03、第三课netty客户端 04、第四课netty线程模型源码分析(一) 05、...
**minaclient.PNG 和 minaserver.PNG** 这两个文件可能是示例程序的截图,可能展示了Mina Server和Mina Client运行时的界面或状态,帮助开发者直观地理解它们的工作方式和交互过程。 **minaClient 和 MinaServer** ...
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
java学习笔记1(java io/nio)设计模式
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
这个“java 实现的mina server client完全能用的”项目可能包含了一个完整的Mina服务器和客户端实现,使得开发者能够快速构建基于TCP或UDP的网络应用。 在Java Mina中,Server是服务端,它监听特定的端口,等待...
5. **Java NIO与Mina**:Mina是一个高性能、轻量级的网络应用框架,它利用了Java NIO的特性来构建网络服务。Mina提供了一套高级API,简化了基于NIO的网络编程,包括TCP和UDP协议的支持,以及过滤器链机制,方便实现...
Java NIO(New Input/Output)是Java标准库在JDK 1.4版本中引入的一个新特性,它提供了一种不同于传统IO流的高效I/O处理方式。NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在Java 1.4版本中引入,NIO提供了一种全新的I/O编程方式,使得Java开发者能够更高效地处理I/O操作...
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。...学习和理解Java NIO以及Netty的使用,对于提升Java网络编程的能力至关重要。
ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...
`NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...
Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...