- 浏览: 361087 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
mylaughing:
请问你的getCount是怎么处理的呢?
hibernate 使用SQL 分页写法 -
evening_xxxy:
[flash=200,200][url][img][list] ...
jquery 简单2级联动 -
wangcl011:
多谢楼主,参考后个人实现实例代码:http://www.itd ...
extjs的ComboBox 2级联动 -
ideaf:
secondeForm
引用引用引用引用引用引用
extjs的ComboBox 2级联动 -
gxdr:
你好,看了您的博客很有收获,但是在操作中遇到了一些问题,我想把 ...
tsung压力测试多服务器(跨域)之间发送消息和状态变更
这几天看了一下MINA,学习了一下mina的技术。写了一些例子从普通的SOCKET通讯到MINA通讯,已经SOCKET client和mina做服务端通讯。下面贴出具体的代码
1.普通socket通讯
client.java
package test.socket; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.net.Socket; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /*********************************************************************** * * client.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 4:07:22 PM * @revision $Id: * ***********************************************************************/ public class client { private static final Log log = LogFactory.getLog(client.class); private static int i = 0; private Socket s; private ObjectOutputStream out; private ObjectInputStream in; public client() throws IOException { } /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub client c = new client(); c.talk(); } /** * 发送消息 * @param out */ public void sendMessage(Socket s) { try { out = new ObjectOutputStream(s.getOutputStream()); Message m = new Message(); m.setStatus(i); m.setType(3); m.setMsgBody("hello client"); i++; out.writeObject(m); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void receiveMessage(Socket s) { try { in = new ObjectInputStream(s.getInputStream()); Message m; m = (Message) in.readObject(); log.info("message::::" + m.getStatus() + "::" + m.getType() + "::" + m.getMsgBody());; } catch (Exception e) { e.printStackTrace(); } } public void talk() throws Exception { while (true) { try { s = new Socket("localhost", 9988); sendMessage(s); receiveMessage(s); out.close(); in.close(); Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } finally { try{ if(s!=null)s.close(); //断开连接 }catch (IOException e) {e.printStackTrace();} } } } }
功能客户端发送和接受服务端消息,休息5秒后在重复发送消息和接受消息
server.java
package test.socket; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /*********************************************************************** * * Server.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 4:01:54 PM * @revision $Id: * ***********************************************************************/ public class Server { private static final Log log = LogFactory.getLog(Server.class); private ServerSocket socket; private ObjectInputStream in; private ObjectOutputStream out; private static int i = 0; public Server() throws Exception{ socket= new ServerSocket(9988); } /** * @param args */ public static void main(String[] args) throws Exception { Server s =new Server(); log.info("server is start"); s.talk(); } /** * 接受消息 * @param s */ public void receiveMessage(Socket s) { try { in = new ObjectInputStream(s.getInputStream()); Message m; m = (Message) in.readObject(); log.info("message::::" + m.getStatus() + "::" + m.getType() + "::" + m.getMsgBody()); } catch (Exception e) { e.printStackTrace(); } } /** * 发送消息 * @param out */ public void sendMessage(Socket s) { try { out = new ObjectOutputStream(s.getOutputStream()); Message m = new Message(); m.setStatus(i); m.setType(3); m.setMsgBody("hello server"); i++; out.writeObject(m); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void talk()throws Exception{ while(true){ Socket socket=null; try { socket = this.socket.accept(); //等待客户连接 receiveMessage(socket); sendMessage(socket); out.close(); in.close(); } catch (RuntimeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try{ if(socket!=null)socket.close(); //断开连接 }catch (IOException e) {e.printStackTrace();} } } } }
服务端接收消息后发送消息给客户端,之后进入柱塞状态等待新的连接
message.java
package test.socket; import java.io.Serializable; public class Message implements Serializable { private int type; private int status; private String msgBody; public int getType() { return type; } public void setType(int type) { this.type = type; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getMsgBody() { return msgBody; } public void setMsgBody(String msgBody) { this.msgBody = msgBody; } }
后启动server.java 和client.JAVA 看运行结果控制台打印出相应收发数据
2 mina 传递字符串
先介绍一下MINA传递数据的方式.mina主要是通过1建立连接,2过滤 3.IoHandler业务处理 这3块
常用到SocketAccepter 相对于ServerSocket ,SocketConnector 相对于Socket 客户端
然后就多了一个数据过滤iofilter.最后的IoHandler 就是业务逻辑处理
MINA 提供了 IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。
一个 IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文档):
void exceptionCaught
(IoSession session, Throwable cause) 当接口中其他方法抛出异常未被捕获时触发此方法 |
void messageReceived
(IoSession session, Object message) 当接收到客户端的请求信息后触发此方法. |
void messageSent
(IoSession session, Object message) 当信息已经传送给客户端后触发此方法. |
void sessionClosed
(IoSession session) 当连接被关闭时触发,例如客户端程序意外退出等等. |
void sessionCreated
(IoSession session) 当一个新客户端连接后触发此方法. |
void sessionIdle
(IoSession session, IdleStatus status) 当连接空闲时触发此方法. |
void sessionOpened
(IoSession session) 详细信息可以参考相关的文档
HelloWorldClient.java (客户端连接和过滤,客户端启动类)
package test.simple; import java.net.InetSocketAddress; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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; /*********************************************************************** * * HelloWorldClient.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 2:09:31 PM * @revision $Id: * ***********************************************************************/ public class HelloWorldClient { private static final Log log = LogFactory.getLog(HelloWorldClient.class); /** * @param args */ public static void main(String[] args) { //实际应用中,这里可以生成一个线程来监听 // Create TCP/IP connector. NioSocketConnector connector = new NioSocketConnector(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory())); //设定服务器端的消息处理器:一个SamplMinaServerHandler对象, connector.setHandler(new HelloWorldClientHandler()); //连结到服务器: try { ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988)); cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); connector.broadcast("ddfdf"); } catch(Exception e) { connector.dispose(); log.error("未能连接到服务器"); } } }HelloWorldClientHandler.java(客户端业务逻辑处理类) |
package test.simple; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; /*********************************************************************** * * HelloWorldClientHandler.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 2:04:26 PM * @revision $Id: * ***********************************************************************/ public class HelloWorldClientHandler extends IoHandlerAdapter { // 当一个客端端连结进入时 private static final Log log = LogFactory .getLog(HelloWorldServerHandler.class); public void sessionOpened(IoSession session) throws Exception { log.info("server : " + session.getRemoteAddress()); } // 当一个客户端关闭时 public void sessionClosed(IoSession session) { log.info("one server Disconnect !"); } // 当客户端发送的消息到达时: public void messageReceived(IoSession session, Object message) throws Exception { String s = (String) message; // Write the received data back to remote peer log.info("收到服务端发来的消息: " + s); //session.write("zzzzz"); } // 发送消息给客户机器 public void messageSent(IoSession session,Object message) throws Exception { log.info("发送消息给服务端: " + message); } // 发送消息异常 public void exceptionCaught(IoSession session, Throwable cause) { session.close(); } // //sessiong空闲 // public void sessionIdle( IoSession session, IdleStatus status ) // { // } // 创建 session public void sessionCreated(IoSession session) { } }
HelloWorldServer.java(服务端连接和过滤类,服务端启动类)
package test.simple; import java.net.InetSocketAddress; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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; /******************************************************************************* * * HelloWorldServer.java * * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 2:01:00 PM * @revision $Id: * ******************************************************************************/ public class HelloWorldServer { private static final Log log = LogFactory.getLog(HelloWorldServer.class); /** * @param args */ public static void main(String[] args) { try { // 创建一个非阻塞的Server端Socket,用NIO NioSocketAcceptor acceptor = new NioSocketAcceptor(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); // 设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("codec", new ProtocolCodecFilter( new TextLineCodecFactory())); // 设定服务器端的消息处理器:一个SamplMinaServerHandler对象, acceptor.setHandler(new HelloWorldServerHandler()); // 服务器端绑定的端口 int bindPort = 9988; // 绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort)); log.info("Mina Server is Listing on:= " + bindPort); } catch (Exception e) { e.printStackTrace(); } } }
HelloWorldServerHandler.java(服务端业务处理类)
package test.simple; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; /******************************************************************************* * * HelloWorldServerHandler.java * * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 1:45:52 PM * @revision $Id: * ******************************************************************************/ public class HelloWorldServerHandler extends IoHandlerAdapter { // 当一个客端端连结进入时 private static final Log log = LogFactory .getLog(HelloWorldServerHandler.class); public void sessionOpened(IoSession session) throws Exception { log.info("incomming client : " + session.getRemoteAddress()); } // 当一个客户端关闭时 public void sessionClosed(IoSession session) { log.info("one Clinet Disconnect !"); } // 当客户端发送的消息到达时: public void messageReceived(IoSession session, Object message) throws Exception { String s = (String) message; // Write the received data back to remote peer log.info("收到客户机发来的消息: " + s); session.write("hello client"); } // 发送消息给客户机器 public void messageSent(IoSession session, Object message) throws Exception { log.info("发送消息给客户端: " + message); } // 发送消息异常 public void exceptionCaught(IoSession session, Throwable cause) { session.close(); } // //sessiong空闲 // public void sessionIdle( IoSession session, IdleStatus status ) // { // } // 创建 session public void sessionCreated(IoSession session) { } }
好了客户端服务端代码都有了可以测试了,启动HelloWorldServer.java 和HelloWorldClient.java 可以看到客户服务端收发消息了。
将HelloWorldClientHandler.java 中
// 当客户端发送的消息到达时:
public void messageReceived(IoSession session, Object message)
throws Exception {
String s = (String) message;
// Write the received data back to remote peer
log.info("收到服务端发来的消息: " + s);
session.write("zzzzz");
}
session.write("zzzzz"); 放开后运行,客户端服务端不挺得收发消息。
原因分析。我们知道messageReceived 方法是“当接收到客户端的请求信息后触发此方法 ” 客户端首先发起消息 给服务端,服务端 messageReceived收到消息后又写数据了,客户端messageReceived消息收到数据也写数据,这样就形成
客户----服务-----客户---服务。。。。。。。。。不停的运行了。
我们想可不可以用MINA 做服务端,普通 socket做客户端呢?答案是肯定的
socketClient.java
package test.simple; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.DataOutputStream; import java.io.DataInputStream; import java.net.Socket; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import test.socket.Message; /*********************************************************************** * * socketClient.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 22, 2009 6:32:03 PM * @revision $Id: * ***********************************************************************/ public class socketClient { private static final Log log = LogFactory.getLog(socketClient.class); private static int i = 0; private Socket s; private DataOutputStream out; private DataInputStream in; public socketClient() throws IOException { } /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub socketClient c = new socketClient(); c.talk(); } /** * 发送消息 * @param out */ public void sendMessage(Socket s) { try { out = new DataOutputStream(s.getOutputStream()); i++; out.writeBytes("wwww\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void receiveMessage(Socket s) { try { in = new DataInputStream(s.getInputStream()); log.info("message::::" +in.readLine());; } catch (Exception e) { e.printStackTrace(); } } public void talk() throws Exception { while (true) { try { s = new Socket("localhost", 9988); sendMessage(s); receiveMessage(s); out.close(); in.close(); Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } finally { try{ if(s!=null)s.close(); //断开连接 }catch (IOException e) {e.printStackTrace();} } } } }
在这里我只写了一个SOCKET短连接,即收发消息后SOCKET断开一次,线程过5秒又建立连接收发消息
注意点:
public void sendMessage(Socket s) {
try {
out = new DataOutputStream(s.getOutputStream());
i++;
out.writeBytes("wwww\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
该方法 out.writeBytes("wwww\n"); 一定要写上\n结束符号才算一条消息结束,因为HelloWorldClient.java
中的过滤 new TextLineCodecFactory() 需要/r/n一行一行读取。
启动HelloWorldServer.java和socketClient.java 这样就可以实现 JAVA socket 和MINA 服务端通信了
3、mina 传递对象
其中原理和传递字符串是一样的,这里就不多说了
client.java(客户端连接和过滤,客户端启动类)
package test.object; import java.net.InetSocketAddress; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; /*********************************************************************** * * client.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 22, 2009 6:16:29 PM * @revision $Id: * ***********************************************************************/ public class client { private static final Log log = LogFactory.getLog(client.class); /** * @param args */ public static void main(String[] args) { // Create TCP/IP connector. NioSocketConnector connector = new NioSocketConnector(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); //设定服务器端的消息处理器:一个SamplMinaServerHandler对象, connector.setHandler(new ObjectClientHandler()); // Set connect timeout. connector.setConnectTimeoutCheckInterval(30); //连结到服务器: try { ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988)); cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); Message b= new Message(); b.setStatus(1); b.setType(2); b.setMsgBody("test clinet"); connector.broadcast(b); } catch(Exception e) { connector.dispose(); log.error("未能连接到服务器"); } } }
ObjectClientHandler.java(客户端业务逻辑处理类)
package test.object; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; /*********************************************************************** * * ObjectClientHandler.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 3:47:40 PM * @revision $Id: * ***********************************************************************/ public class ObjectClientHandler extends IoHandlerAdapter { // 当一个客端端连结进入时 private static final Log log = LogFactory .getLog(ObjectClientHandler.class); public void sessionOpened(IoSession session) throws Exception { log.info("server : " + session.getRemoteAddress()); } // 当一个客户端关闭时 public void sessionClosed(IoSession session) { log.info("one server Disconnect !"); } // 当客户端发送的消息到达时: public void messageReceived(IoSession session, Object message) throws Exception { Message s = (Message) message; // Write the received data back to remote peer log.info("收到服务端发来的消息: " + s.getMsgBody()+"::"+s.getStatus()+"::"+s.getType()); // Message b= new Message(); // b.setStatus(1); // b.setType(2); // b.setMsgBody("test client"); // session.write(b); } // 发送消息给客户机器 public void messageSent(IoSession session,Object message) throws Exception { Message s = (Message) message; log.info("发送消息给服务端: " + s.getMsgBody()+"::"+s.getStatus()+"::"+s.getType()); } // 发送消息异常 public void exceptionCaught(IoSession session, Throwable cause) { session.close(); } // //sessiong空闲 // public void sessionIdle( IoSession session, IdleStatus status ) // { // } // 创建 session public void sessionCreated(IoSession session) { } }
Server.java(服务端连接和过滤类,服务端启动类)
package test.object; import java.net.InetSocketAddress; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import test.simple.HelloWorldServer; import test.simple.HelloWorldServerHandler; /*********************************************************************** * * Server.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 3:52:21 PM * @revision $Id: * ***********************************************************************/ public class Server { private static final Log log = LogFactory.getLog(Server.class); /** * @param args */ public static void main(String[] args) { try { // 创建一个非阻塞的Server端Socket,用NIO NioSocketAcceptor acceptor = new NioSocketAcceptor(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); // 设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("codec", new ProtocolCodecFilter( new ObjectSerializationCodecFactory())); // 设定服务器端的消息处理器:一个ObjectServerHandler对象, acceptor.setHandler(new ObjectServerHandler()); // 服务器端绑定的端口 int bindPort = 9988; // 绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort)); log.info("Mina Server is Listing on:= " + bindPort); } catch (Exception e) { e.printStackTrace(); } } }
ObjectServerHandler.java(服务端业务处理类)
package test.object; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; /******************************************************************************* * * ObjectServerHandler.java * * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Aug 21, 2009 3:46:52 PM * @revision $Id: * ******************************************************************************/ public class ObjectServerHandler extends IoHandlerAdapter { // 当一个客端端连结进入时 private static final Log log = LogFactory.getLog(ObjectServerHandler.class); public void sessionOpened(IoSession session) throws Exception { log.info("incomming client : " + session.getRemoteAddress()); } // 当一个客户端关闭时 public void sessionClosed(IoSession session) { log.info("one Clinet Disconnect !"); } // 当客户端发送的消息到达时: public void messageReceived(IoSession session, Object message) throws Exception { Message s = (Message) message; // Write the received data back to remote peer log.info("收到客户机发来的消息: " + s.getMsgBody() + "::" + s.getStatus() + "::" + s.getType()); Message b = new Message(); b.setStatus(1); b.setType(2); b.setMsgBody("test zhou"); session.write(b); } // 发送消息给客户机器 public void messageSent(IoSession session, Object message) throws Exception { Message s = (Message) message; log.info("发送消息给客户端: " + s.getMsgBody() + "::" + s.getStatus() + "::" + s.getType()); } // 发送消息异常 public void exceptionCaught(IoSession session, Throwable cause) { session.close(); } // //sessiong空闲 // public void sessionIdle( IoSession session, IdleStatus status ) // { // } // 创建 session public void sessionCreated(IoSession session) { } }
message.java 和1.中的一样,这里不贴出来了
启动Server.java 和client可以看运行效果了
java socket客户端传递对象给 MINA 服务端,在MINA 收消息 的时候没有消息打出就关闭连接了,还没有试验出来。
希望知道的朋友告诉一声。
- testMina.rar (1.2 MB)
- 下载次数: 425
评论
获益匪浅!!
初学Mina,经你的文章明白了很多。
Thanks a lot !!!!
相关推荐
通过阅读和理解这些代码,你可以更好地掌握Mina与Socket通信的实现方法,并应用于自己的项目中。 总的来说,Mina与Socket结合使用,可以构建出高效、灵活的网络通信解决方案。Mina的高级抽象简化了网络编程的复杂性...
Socket和Mina是Java网络编程中的两个重要工具,它们在构建高性能、高并发的网络应用中发挥着关键作用。Socket是TCP/IP通信的基础,而Mina是一个高效的网络应用框架,它简化了网络编程的复杂性。 Socket,也被称为套...
Apache Mina(Model-View-Controller for Network Applications)是一个高度可扩展和灵活的网络应用程序框架,它简化了TCP/IP和UDP/IP协议的实现,支持多种协议如HTTP、FTP、Telnet等。Mina的核心设计思想是将网络...
现在我们来详细探讨如何在SpringBoot项目中集成Mina进行Socket通讯,并结合myBatis进行数据交互。 首先,我们需要在SpringBoot项目中引入Mina的相关依赖。在`pom.xml`文件中添加Mina的依赖项,例如: ```xml ...
Apache Mina2是一个基于事件驱动和异步模型的网络应用框架,它为各种协议如TCP/IP、UDP/IP和HTTP等提供了一种统一的抽象层。Mina2通过高度封装的API,简化了网络编程的复杂性,使得开发者可以专注于业务逻辑,而无需...
最后,“MinaDemo”可能是Mina框架的一个示例项目,你可以通过运行和分析这个项目,进一步掌握Mina的实战应用。 总结来说,本教程将引导你从理论到实践,掌握Java NIO的基本原理,理解Mina框架的使用,以及如何在...
- MINA提供了Socket和Datagram接口,分别对应TCP和UDP通信,支持自定义过滤器链,方便对数据进行处理和解析。 2. **MINA与Android集成** - 在Android项目中引入MINA依赖:你需要在build.gradle文件中添加MINA的...
mina利用Java的Socket API,提供了一种简单的方式来创建TCP服务器和客户端。在mina中,我们可以创建一个Acceptor来监听特定的端口,当有客户端连接时,它会创建一个Session来处理这个连接。mina的EventDrivenSession...
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,专门用于构建高性能、高可用性的网络应用程序,如TCP/IP和UDP服务。在这个主题中,“mina服务器--实现纯文本和非纯文本的加密...
利用 Mina 可以高效地完成以下任务: <br>TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JXM 集成 IoC 容器集成( Spring 、 Pico 等) 状态机 <br>据官方评测, APR 的...
总的来说,掌握Android上的Socket编程对于开发需要实时数据交换的应用(如即时通讯、在线游戏等)至关重要。理解Socket的工作原理,以及如何在Android环境中使用它,是提升Android应用开发技能的重要一步。同时,...
它为开发者提供了构建网络应用的简单、灵活和高效的工具,广泛应用于TCP/IP协议栈如TCP、UDP等以及Socket通讯,同时也支持FTP、SMTP、HTTP等多种协议。 在Android开发中,Mina库常用于实现服务器端的长连接通信。长...
在实际的通信过程中,客户端需要创建一个Socket连接到服务器的8080端口,然后通过SocketChannel发送和接收数据。服务器端接收到连接请求后,会创建一个IoSession,每个IoSession代表一个客户端连接。通过IoSession,...
通过阅读和分析`cim_for_mina`项目的源代码,你可以了解Mina如何应用于即时通讯,同时也能提升自己的网络编程能力。在实践中不断调试和优化,你会对Mina有更深入的理解,也可以为自己的项目开发积累宝贵经验。
在IT行业中,队列(Queue)和MINA通信框架是两个关键的概念,它们在系统设计和网络编程中扮演着重要角色。本实例将探讨如何将队列与MINA通信框架结合,以实现高效、可靠的网络服务。以下是关于这两个概念及其结合...
一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议(如TCP/IP,UDP/IP协议等)下快速高效开发。 Apache Mina也称为: NIO...
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...
MINA是用Java编写的,适用于TCP/IP和UDP/IP协议,包括Socket和Datagram通信。这个框架广泛应用于服务器端的开发,如HTTP服务器、FTP服务器、聊天服务器等。 MINA的核心特性: 1. **异步事件驱动**:MINA采用非阻塞...