网上的例子多数是两端同为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);
分享到:
相关推荐
Mina框架提供了对网络通信Server端和Client端的封装。开发者不需要直接与底层的网络通信细节打交道,只需要关心如何发送和接收数据以及如何实现具体的业务逻辑。Mina在整个网络通信结构中,将网络通信的细节与应用...
在Mina框架中,网络通信的Server端和Client端都通过Mina的API进行封装,从而将网络通信的具体细节与应用程序逻辑相隔离。开发者只需关注于数据的发送、接收以及业务逻辑的实现。 Mina的执行流程主要包含以下步骤: ...
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaServer { public static void main(String[] args) throws Exception { IoAcceptor acceptor = new NioSocketAcceptor(); ...
学习Mina,你需要具备的基础知识包括JAVA IO、JAVA NIO、JAVA Socket、JAVA线程以及并发库`java.util.concurrent.*`。 Mina的通信结构分为Server端和Client端,它们都包含以下组件: 1. **IoService**:这是一个...
通过"MINA_Server_Test"这个项目,开发者可以深入理解MINA框架如何工作,如何构建一个高性能的网络服务器,并且能够与"MINA_Client_Test"配合,进行实际的通信测试,验证服务器的正确性和效率。 总之,MINA为Java...
Mina的网络通信分为Server端和Client端,两者在通信结构中的位置是相同的,都利用了Mina的API进行封装,简化了通信编程。无论服务端还是客户端,Mina的执行流程都可以归纳为以下步骤: - 创建IoService实例,对于...
对于 Mina 的 Server 端和 Client 端,Mina 的 API 将实际的网络通信与应用程序逻辑相隔离,使用者只需关注数据的发送接收和业务逻辑。Mina 的 Server 端实现,如 NioSocketAcceptor,是基于 Java 的 NIO 通道的 ...
- **示例代码**:提供了TCP Server、TCP Client、UDP Server及UDP Client等典型应用场景下的示例代码。 #### Chapter 3 - 服务 - **IoService介绍**:IoService是Mina的核心组件之一,负责管理I/O操作。本章节深入...
框架中包含了Server和Client的封装,简化了网络通信结构。在Mina的架构中,IoService接口负责在一个线程上建立套接字连接,并通过Selector监听连接状态。当IoSession关闭时,如果不通过IoService的close方法,实际...
Mina框架封装了网络通信的Server端和Client端,允许开发者在不关心底层网络通信细节的情况下,通过简单的API进行数据的发送与接收。Mina的主要组件包括以下几个: 1. IoService:负责套接字的建立,并且拥有自己的...
#### 三、NIO与IO模型 **1. IO模型分类** - **同步IO(Synchronous IO)**:程序直接参与数据读写,等待I/O完成。 - **异步IO(Asynchronous IO)**:程序提交读写请求后继续执行其他任务,直到I/O完成后再通知程序。 -...
在Mina 2.0版本中,框架分为Server端和Client端,两者都在通信结构中扮演着类似的角色,将网络通信与业务逻辑分离,使得开发者可以专注于数据处理和业务实现。Mina 的执行流程主要包括以下几个关键组件: 1. **...
Mina提供了一个高级抽象层,允许开发者用类似处理Java IO的方式处理NIO(非阻塞I/O)。它简化了网络编程,使得开发者可以专注于业务逻辑,而无需关心底层的网络细节。Mina支持多种协议,如HTTP、FTP、Telnet等,同时...
learn mina the hard way ...- NIOServer中read方法为空,NIOClient中read方法消息回送 NIOServer中read方法消息回送,NIOClient中read方法为空 - 服务器端和客户端的read方法都不为空,就会一直的交互下去. 参见
1. **事件驱动模型**:MINA采用非阻塞I/O模型,基于Java NIO(New IO)库。这种模型允许MINA在处理大量并发连接时保持高效的性能,因为I/O操作不会阻塞线程,而是通过事件通知机制来触发回调。 2. **过滤器链**:...
Java NIO(New IO)是Java 1.4引入的新特性,相比传统的IO模型,NIO提供了更高效的数据传输方式。NIO的核心组件包括选择器(Selector)、通道(Channel)和缓冲区(Buffer)。选择器用于监听多个通道的事件,通道则...
《MinaDemos:新手入门MINA通讯框架的实践指南》 MINA(Java Multithreaded Network Application Framework)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高并发、低延迟的网络服务。它广泛...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...