服务端:
MainServer.java
package com.nafio.mina; import java.net.InetSocketAddress; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MainServer { /** * @param args */ public static void main(String[] args) throws Exception{ //创建一个非阻塞的Server端Socket SocketAcceptor acceptor = new NioSocketAcceptor(); //创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory())); //设定服务器端的消息处理器:一个SamplMinaServerHandler对象, acceptor.setHandler(new MinaServerHandler()); // 服务器端绑定的端口 int bindPort=9988; //绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort)); System.out.println("Mina Server is Listing on:= " + bindPort); } }
2 MinaServerHandler.java
package com.nafio.mina; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class MinaServerHandler extends IoHandlerAdapter{ /** * 当客户端发送消息到达时 */ public void messageReceived(IoSession session, Object message) throws Exception { //super.messageReceived(session, message); //我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String: System.out.println("ServerMessageReceived"); String s=(String)message; // Write the received data back to remote peer System.out.println("服务端->收到客户机发来的消息: "+s); //测试将消息回送给客户端 session.write(s+count); count++; } private int count = 0; public void messageSent(IoSession session, Object message) throws Exception { System.out.println("服务端->messageSent"); } public void sessionClosed(IoSession session) throws Exception { System.out.println("服务端->sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("服务端->sessionCreated"); } /** * 当新客户端连接时调用 */ public void sessionOpened(IoSession session) throws Exception { System.out.println("服务端->Open"); } }
客户端:
1 MainClient.java
package com.nafio.mina; import java.net.InetSocketAddress; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; public class MainClient { public static void main(String[] args) throws Exception{ // 创建 TCP/IP connector. NioSocketConnector connector = new NioSocketConnector(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory())); //设定服务器端的消息处理器:一个SamplMinaServerHandler对象, connector.setHandler(new MinaClientHandler()); // Set connect timeout. connector.setConnectTimeout(30); //连结到服务器: ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988)); cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); connector.dispose(); } }
2 MinaClientHandler.java
package com.nafio.mina; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class MinaClientHandler extends IoHandlerAdapter{ /** * 当客户端发送的消息到达时 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { String s=(String)message; System.out.println("客户端->服务器发来的消息: "+s); } @Override public void messageSent(IoSession session, Object message) throws Exception { super.messageSent(session, message); System.out.println("客户端->messageSent"); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("客户端->sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("客户端->sessionCreated"); } @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("客户端->sessionOpened"); //发送信息 try { SendMsg(session); } catch(Exception e) { e.printStackTrace(); } } //by nafio 自己写的函数 public void SendMsg(IoSession session) throws Exception{ // TransferClass tansferClass=new TransferClass(); // tansferClass.setNum(1); // tansferClass.setString("字符串"); String tansferStr="我是数据"; session.write(tansferStr); } }
相关推荐
标题中的"Mina文件及字符串传输"指的是使用Apache Mina框架进行数据交互的过程,包括发送和接收字符串请求以及传输文件。这一过程通常涉及到网络编程中的TCP/IP协议,因为Mina支持基于TCP的传输层通信。 首先,让...
在`messageReceived`方法中,根据接收到的字符串消息判断客户端输入是否为"quit",如果不是,则向客户端发送当前时间。 ### MINA架构简介 MINA架构的设计便于开发者快速实现复杂网络应用。核心是IoService,它作为...
在"Mina文件及字符串传输"这个场景中,我们可以理解为利用Mina框架实现了一种服务,允许客户端通过发送字符串请求来获取服务器上的文件。这种功能在分布式系统、文件共享或者远程操作等场景中非常常见。下面我们将...
TextLineCodec对象可以对字符串进行编码和解码,例如将字符串编码为UTF-8格式、对数据进行加密等。 Mina2.0框架源码剖析(七) LoggingFilter是一个实现了IoFilter接口的Filter,负责对数据进行日志记录。...
这是Java NIO中的核心构造,Mina对其进行了封装,提供了更多的便利方法,如自动扩容、字符串编码等。开发人员可以通过Mina提供的ByteBuffer控制数据的分配,选择从堆或栈中分配内存,甚至可以启用可选的缓冲池机制以...
为了处理字符串传输,Mina提供了`TextLineCodecFactory`,它可以方便地对字符串进行编码和解码。我们将这个编解码器添加到过滤器链中。 ```java acceptor.getFilterChain().addLast("codec", new ...
`ProtocolCodecFilter`则负责消息的编码和解码,它使用了`TextLineCodecFactory`,该工厂类可以将接收到的文本行数据转换为字符串对象。 `acceptor.setHandler()`配置了`IoHandler`的实现,即`TimeServerHandler`,...
- **Encoder**:在发送数据时,首先将业务对象转换为 XML 字符串,然后在 `Encoder` 中将这个字符串编码为字节流,以便于在网络中传输。 5. **ServerHandler** 和 **IOservice**: 在实际应用中,你可能会有特定...
`TextLineCodecFactory`依赖于指定的字符集(这里是UTF-8),将输入的字符串转换为字节流,反之亦然。 `acceptor.setHandler(new TimeServerHandler())`定义了处理客户端连接的处理器,即`TimeServerHandler`。...
对于简单的字符串传输,Mina提供了`TextLineCodecFactory`来方便地进行编解码处理。 ```java acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName(...
例如,我们可以编写一个方法将十进制数转换为二进制,或者将十六进制字符串解析为字节数组,以便于数据的编码和解码。 总的来说,通过SpringBoot集成Mina框架,我们可以构建一个高性能的Socket服务器,处理客户端的...
1. **创建ProtocolCodecFactory**:定义一个codec工厂,用于将时间字符串编码成字节流,以及将字节流解码回时间字符串。 2. **配置Mina Service**:设置监听端口,创建IoAcceptor,并关联编码解码器。 3. **编写...
例如,我们可以使用 Mina 提供的 TextLineCodecFactory 来处理字符串的编解码。 ```java acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")...
#### 二、实践案例:实现字符串传输的C/S程序 本节将详细介绍如何使用Mina来实现一个简单的客户端与服务器之间的字符串传输案例。 ##### 步骤1:环境搭建 首先,需要下载Mina的库文件并将其添加到项目中。例如,...
- 正文:根据协议定义,可以包含各种类型的数据,如字符串、整数、浮点数、结构体等。 - 错误处理:确保数据完整性和一致性,如校验和、序列号、确认机制等。 2. **自定义编解码器实现**: - 编码器:负责将应用...
通过以上步骤,你就创建了一个基础的TCP服务器,能够接收和处理基于字符串的网络通信。在实际应用中,你可能还需要实现IoHandler接口,定义具体的数据处理逻辑,并根据需求扩展过滤器链,以实现复杂的网络应用功能。...
在 `HelloServer` 示例中,它被用来将接收到的文本行转换为字符串对象,并将字符串响应回客户端。 6. **IoHandler**:这是处理网络事件的核心接口,`IoHandler` 的 `messageReceived` 方法会在接收到客户端消息时被...
前者记录所有通信过程,后者用于解析客户端发来的表达式字符串并将其转化为特定的数据结构。 3. **I/O 处理器**:定义一个 IoHandler 实现类,其中实现 sessionOpened 方法以初始化会话;实现 messageReceived 方法...