`
xly_971223
  • 浏览: 1273905 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mina nio server与io client通讯

阅读更多
网上的例子多数是两端同为nio
对于nio server 与 io client的通讯比较少
改造了一下 看下面代码
server端 共两个类
public class MainServer {
	public static void main(String[] args) throws Exception {
		SocketAcceptor socketAcceptor = new NioSocketAcceptor();
		DefaultIoFilterChainBuilder chain = socketAcceptor.getFilterChain();
		//设定这个过滤器将一行一行(/r/n)的读取数据
		chain.addLast( "myChain", new ProtocolCodecFilter(new TextLineCodecFactory()) );
		
		socketAcceptor.setHandler(new NioServerHandler());
		
		int port = 9988;
		socketAcceptor.bind(new InetSocketAddress(port));
		
		System.out.println("Mina Server is Listing on:= " + port);
	}
}


SocketAcceptor 相当如 ServerSocket类  实现服务端的接受功能
DefaultIoFilterChainBuilder 是一个 IoFilter链,可以对接受到数据进行处理 跟 http filter 类似
TextLineCodecFactory的意思是按行读取,每读取一行就传递给IoHandler来处理
socketAcceptor.setHandler(new NioServerHandler()); 绑定请求处理器,客户端的请求有NioServerHandler处理
更多 http://blog.csdn.net/sinboy/archive/2009/03/11/3981680.aspx

好下面来看看 NioServerHandler

public class NioServerHandler implements IoHandler{
	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("<server> client connected : "+session.getRemoteAddress());
	}
	
	public void sessionClosed(IoSession session){
		System.out.println("<server> client disconnection" + session.getRemoteAddress());
	}
	
	public void messageReceived(IoSession session, Object message) throws Exception{
		String s = (String)message;
		System.out.println("<server> received message:" + s);
		session.write("<server> Roger" );
		
	}
  //省略若干接口
}

重点是messageReceived方法 接受到的数据通过 message 参数传过来
message参数是Ojbect类型 就是说你可以吧接受到的数据在Filter中封装成任何你希望的类型然后传递过来处理

ok server端就讲到这里

client端
public class IoClient {

public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 9988);

PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println("hello server");
pw.flush();

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

System.out.println(reader.readLine());

socket.close();
}

}

1 创建一个socket
2 发送数据到server端 这里用pw.println("hello server");方法一行一行的发送
3 接受server返回的数据
ok! run it

这里有一个问题 一点要加
pw.flush();
否则数据不会被提交 或者用
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
1
0
分享到:
评论

相关推荐

    Apache_Mina_Server中文参考手册.pdf

    Mina框架提供了对网络通信Server端和Client端的封装。开发者不需要直接与底层的网络通信细节打交道,只需要关心如何发送和接收数据以及如何实现具体的业务逻辑。Mina在整个网络通信结构中,将网络通信的细节与应用...

    Apache_Mina_Server_2.0中文参考手册V1.0.pdf

    在Mina框架中,网络通信的Server端和Client端都通过Mina的API进行封装,从而将网络通信的具体细节与应用程序逻辑相隔离。开发者只需关注于数据的发送、接收以及业务逻辑的实现。 Mina的执行流程主要包含以下步骤: ...

    Mina+Socket通信

    import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaServer { public static void main(String[] args) throws Exception { IoAcceptor acceptor = new NioSocketAcceptor(); ...

    Apache-Mina-Server-2.0中文参考手册V1.0.docx

    学习Mina,你需要具备的基础知识包括JAVA IO、JAVA NIO、JAVA Socket、JAVA线程以及并发库`java.util.concurrent.*`。 Mina的通信结构分为Server端和Client端,它们都包含以下组件: 1. **IoService**:这是一个...

    MINA 服务器端实现 可运行

    通过"MINA_Server_Test"这个项目,开发者可以深入理解MINA框架如何工作,如何构建一个高性能的网络服务器,并且能够与"MINA_Client_Test"配合,进行实际的通信测试,验证服务器的正确性和效率。 总之,MINA为Java...

    Apache Mina Server 2.0 中文参考手册(带目录)

    Mina的网络通信分为Server端和Client端,两者在通信结构中的位置是相同的,都利用了Mina的API进行封装,简化了通信编程。无论服务端还是客户端,Mina的执行流程都可以归纳为以下步骤: - 创建IoService实例,对于...

    mina 中文参考文档

    对于 Mina 的 Server 端和 Client 端,Mina 的 API 将实际的网络通信与应用程序逻辑相隔离,使用者只需关注数据的发送接收和业务逻辑。Mina 的 Server 端实现,如 NioSocketAcceptor,是基于 Java 的 NIO 通道的 ...

    Mina2中文文档

    - **示例代码**:提供了TCP Server、TCP Client、UDP Server及UDP Client等典型应用场景下的示例代码。 #### Chapter 3 - 服务 - **IoService介绍**:IoService是Mina的核心组件之一,负责管理I/O操作。本章节深入...

    java-mina通信框架详解.docx

    框架中包含了Server和Client的封装,简化了网络通信结构。在Mina的架构中,IoService接口负责在一个线程上建立套接字连接,并通过Selector监听连接状态。当IoSession关闭时,如果不通过IoService的close方法,实际...

    Mina中文参考手册-API

    Mina框架封装了网络通信的Server端和Client端,允许开发者在不关心底层网络通信细节的情况下,通过简单的API进行数据的发送与接收。Mina的主要组件包括以下几个: 1. IoService:负责套接字的建立,并且拥有自己的...

    NIO trick and trap .pdf

    #### 三、NIO与IO模型 **1. IO模型分类** - **同步IO(Synchronous IO)**:程序直接参与数据读写,等待I/O完成。 - **异步IO(Asynchronous IO)**:程序提交读写请求后继续执行其他任务,直到I/O完成后再通知程序。 -...

    Apache mina框架入门教程

    在Mina 2.0版本中,框架分为Server端和Client端,两者都在通信结构中扮演着类似的角色,将网络通信与业务逻辑分离,使得开发者可以专注于数据处理和业务实现。Mina 的执行流程主要包括以下几个关键组件: 1. **...

    mina 服务器socket客服端发消息

    Mina提供了一个高级抽象层,允许开发者用类似处理Java IO的方式处理NIO(非阻塞I/O)。它简化了网络编程,使得开发者可以专注于业务逻辑,而无需关心底层的网络细节。Mina支持多种协议,如HTTP、FTP、Telnet等,同时...

    learn-mina-the-hard-way

    learn mina the hard way ...- NIOServer中read方法为空,NIOClient中read方法消息回送 NIOServer中read方法消息回送,NIOClient中read方法为空 - 服务器端和客户端的read方法都不为空,就会一直的交互下去. 参见

    mina:Apache MINA的镜像

    1. **事件驱动模型**:MINA采用非阻塞I/O模型,基于Java NIO(New IO)库。这种模型允许MINA在处理大量并发连接时保持高效的性能,因为I/O操作不会阻塞线程,而是通过事件通知机制来触发回调。 2. **过滤器链**:...

    JAVA网络通信系统的研究与开发(源代码)

    Java NIO(New IO)是Java 1.4引入的新特性,相比传统的IO模型,NIO提供了更高效的数据传输方式。NIO的核心组件包括选择器(Selector)、通道(Channel)和缓冲区(Buffer)。选择器用于监听多个通道的事件,通道则...

    MinaDemos.rar

    《MinaDemos:新手入门MINA通讯框架的实践指南》 MINA(Java Multithreaded Network Application Framework)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高并发、低延迟的网络服务。它广泛...

    java开源包1

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

Global site tag (gtag.js) - Google Analytics