`
huaye2007
  • 浏览: 38805 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

java nio mina 学习笔记1 Simple Server and Client

 
阅读更多
//服务端程序
/*
 * 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(server+client)

    总之,这个Java NIO IM实例是一个很好的学习资源,它演示了如何利用NIO进行高效的网络通信。通过深入理解并实践这个示例,开发者可以更好地掌握Java NIO的核心概念和技术,并将其应用于实际项目中,提升系统的性能和...

    Java视频教程 Java游戏服务器端开发 Netty NIO AIO Mina视频教程

    jaca视频教程 jaca游戏服务器端开发 Netty NIO AIO Mina视频教程 课程目录: 一、Netty快速入门教程 01、第一课NIO 02、第二课netty服务端 03、第三课netty客户端 04、第四课netty线程模型源码分析(一) 05、...

    Mina server client实例

    **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 NIO和java并发编程的书籍java...

    java学习笔记1(java io/nio)

    java学习笔记1(java io/nio)设计模式

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    Ioserver java Nio socket 框架

    Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!

    java 实现的mina server client完全能用的

    这个“java 实现的mina server client完全能用的”项目可能包含了一个完整的Mina服务器和客户端实现,使得开发者能够快速构建基于TCP或UDP的网络应用。 在Java Mina中,Server是服务端,它监听特定的端口,等待...

    nio.rar_NIO_java nio_java_nio_mina java n

    5. **Java NIO与Mina**:Mina是一个高性能、轻量级的网络应用框架,它利用了Java NIO的特性来构建网络服务。Mina提供了一套高级API,简化了基于NIO的网络编程,包括TCP和UDP协议的支持,以及过滤器链机制,方便实现...

    java NIO学习系列 笔记

    Java NIO(New Input/Output)是Java标准库在JDK 1.4版本中引入的一个新特性,它提供了一种不同于传统IO流的高效I/O处理方式。NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式...

    java NIO.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...

    java nio入门学习,两个pdf

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在Java 1.4版本中引入,NIO提供了一种全新的I/O编程方式,使得Java开发者能够更高效地处理I/O操作...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...

    Java NIO英文高清原版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。...学习和理解Java NIO以及Netty的使用,对于提升Java网络编程的能力至关重要。

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    java NIO实例

    `NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...

    java NIO 视频教程

    Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...

    Java Nio selector例程

    java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

Global site tag (gtag.js) - Google Analytics