//服务端程序
/*
* 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的通信实例,带UML结构图及server、client源码。
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系列教程(六)...
JAVA NIO学习资料JAVA NIO学习资料
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
java NIO的基本知识点学习笔记,不包含具体代码
java nio入门学习,两个pdfjava nio入门学习,两个pdf
Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...
Java NIO英文高清原版
jaca视频教程 jaca游戏服务器端开发 Netty NIO AIO Mina视频教程 课程目录: 一、Netty快速入门教程 01、第一课NIO 02、第二课netty服务端 03、第三课netty客户端 04、第四课netty线程模型源码分析(一) 05、...
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 ...
java NIO.zip
讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
javaNIO学习笔记(csdn)————程序
Contents: 1 核心概念以及基本读写 2 缓冲区的实现机制 3 连网与异步IO 4 分散和聚集IO 5 文件锁定
java_nio学习文档