客户端socket传对象给mina服务端暂时不通,可能跟下面传中文字符串有些类似.
应该和mina端过滤器的相关设置有关.
服务端:
1 MinaServer.java
package com.nafio.server; import java.io.IOException; 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 MinaServer { private static MinaServer minaServer = null; //创建一个非阻塞的Server端Socket private SocketAcceptor acceptor = new NioSocketAcceptor(); //创建接收数据的过滤器 private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); private int bindPort = 8888; //单例 public static MinaServer getInstances() { if (null == minaServer) { minaServer = new MinaServer(); } return minaServer; } private MinaServer() { //设定这个过滤器将按对象读取数据 //单例模式---------------------------------------- // chain.addLast("myChin", new ProtocolCodecFilter( // new ObjectSerializationCodecFactory())); //设定服务器端的消息处理器:一个MinaServerHandler对象, // acceptor.setHandler(ServerHandler.getInstances()); //非单例模式--------------------------------------- //接收文字 chain.addLast("myChin", new ProtocolCodecFilter( new TextLineCodecFactory())); //接收对象 // chain.addLast("myChin", new ProtocolCodecFilter( // new ObjectSerializationCodecFactory())); acceptor.setHandler(new ServerHandler()); try { //绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort)); } catch (IOException e) { e.printStackTrace(); } System.out.println("服务端:监听端口--->" + bindPort); } public static void main(String[] args) throws Exception { MinaServer.getInstances(); //new MinaServer(); } }
2 ServerHandler.java
package com.nafio.server; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.service.IoHandler; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; import com.nafio.obj.TransferObj; //下面两种写法应该等同,不确定? //public class ServerHandler extends IoHandlerAdapter { public class ServerHandler extends IoFilterAdapter implements IoHandler { private static ServerHandler samplMinaServerHandler = null; public static ServerHandler getInstances() { if (null == samplMinaServerHandler) { samplMinaServerHandler = new ServerHandler(); } return samplMinaServerHandler; } public ServerHandler() { } public void sessionOpened(IoSession session) throws Exception { System.out.println("服务端:会话打开"); } public void sessionClosed(IoSession session) { } public void messageReceived(IoSession session, Object message)throws Exception { //接收字符串 String str = (String)message; System.out.println("服务端:收到客户端发来的信息--->"+str); //System.out.println("服务端:收到信息"); //接收对象 // if (message instanceof TransferObj) { // TransferObj obj = (TransferObj) message; // System.out.println("服务端:收到客户端数据--->"+obj.getDate());+ // } } public void exceptionCaught(IoSession arg0, Throwable arg1)throws Exception { } public void messageSent(IoSession arg0, Object arg1) throws Exception { } public void sessionCreated(IoSession arg0) throws Exception { System.out.println("服务端:会话创建"); } public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception { } }
socket客户端
SocketClient.java
package com.nafio.socketclient; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import com.nafio.obj.TransferObj; public class SocketClient { private Socket s; private DataOutputStream out; private DataInputStream in; public SocketClient() throws IOException { } public static void main(String[] args) throws Exception { SocketClient c = new SocketClient(); c.talk(); } // 发送对象 // ObjectOutputStream oos; // TransferObj obj; public void sendMessage(Socket s) { try { //socket传字符串 out = new DataOutputStream(s.getOutputStream()); byte[] bt="中文\n".getBytes(); out.write(bt); out.writeBytes("nafio_date\n"); //out.writeUTF("中文\n");//by nafio这么写不行 //socket传对象 // oos = new ObjectOutputStream(s.getOutputStream()); // obj=new TransferObj(); // obj.setDate("socketDateToMina"); // oos.writeObject(obj); // oos.flush(); } catch (IOException e) { e.printStackTrace(); } } public void receiveMessage(Socket s) { try { in = new DataInputStream(s.getInputStream()); } catch (Exception e) { e.printStackTrace(); } } public void talk() throws Exception { /*while (true)*/ { try { //发送对象 //oos.close(); s = new Socket("localhost", 8888); System.out.println("客户端:发送信息"); sendMessage(s); System.out.println("发送信息完毕!"); //发字符串 //receiveMessage(s); out.close(); //in.close(); } catch(Exception e){ e.printStackTrace(); } finally { try{ if(s!=null)s.close(); //断开连接 }catch (IOException e) {e.printStackTrace();} } } } }
相关推荐
Java客户端Socket与Mina服务端通信是网络编程中常见的应用场景,尤其在开发分布式系统或实时数据传输时。这里我们将深入探讨这两个技术,并了解如何通过它们建立保持长连接的通信。 首先,Socket是Java中用于实现...
mina框架是Apache组织开发的一个网络通信框架,它基于Java NIO(非阻塞I/O)构建,用于简化网络编程,尤其是TCP和UDP协议的应用开发。本项目提供了服务端和客户端的示例,使得开发者能够更好地理解和应用MINA框架。 ...
文件"MinaSocket"可能包含了实现上述功能的详细代码,包括服务端的Acceptor配置、过滤器设置、事件处理器编写,以及客户端的Socket连接、数据发送和接收等。通过阅读和理解这些代码,你可以更好地掌握Mina与Socket...
总结来说,这个"网络编程(socket、NIO、mina)---demo"涵盖了网络编程的基础与进阶,从基础的Socket通信,到提高性能的NIO,再到高级的Mina框架,这些都是开发分布式系统、网络服务和实时通信应用不可或缺的技术。...
在本案例中,客户端将通过Socket连接到Mina服务端,发送文件请求,并传输文件内容。 三、Mina服务端实现 1. 初始化IoAcceptor:Mina服务端首先需要创建一个IoAcceptor实例,用于监听特定端口的连接请求。通常使用...
以上就是使用Java Mina框架创建一个简单的Socket服务端和客户端的实现。在实际应用中,可能还需要考虑异常处理、心跳机制、多线程处理、消息序列化与反序列化等问题。Mina提供的API非常灵活,可以根据需求进行扩展和...
【标题】"原创nio socket mina+javascript+flash实现commet长连接网页聊天室"揭示了一个基于Java NIO(Non-blocking I/O)的Socket通信框架Mina与JavaScript、Flash技术结合,实现COMET(Comet是使服务器向浏览器推...
Apache MINA(Multi-purpose ...通过学习和实践"mina及时推送客户端服务端实现"项目,开发者不仅能掌握MINA框架的基本用法,还能深入了解TCP长连接、实时推送的原理与实现,为构建高效、稳定的网络应用打下坚实基础。
01、Mina服务端helloWorld入门.flv 02、Mina客户端helloWorld入门.flv 03、Mina整体体系结构分析.flv 04、Mina学习之长短连接.flv 05、Mina学习之MinaIOService接口.flv 06、Mina学习之MinaIOFilter接口.flv ...
Socket Mina测试框架是一个强大的网络通信应用框架,主要用于简化Java应用程序与远程服务器之间的通信。它提供了高度可扩展和高性能的I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层的网络实现细节。Mina...
3. **客户端与服务端**:在Socket通信中,客户端通常发起连接请求,而服务端则等待并响应这些请求。客户端代码通常包含创建Socket、连接到服务器、发送数据、接收数据和关闭连接等步骤;服务端则需要监听特定端口,...
在Mina中,Socket通信是通过一个事件驱动模型实现的,该模型基于I/O多路复用技术,如Java的NIO(Non-blocking I/O)。这种模型可以处理大量的并发连接,且资源消耗较低。Spring的集成使得开发者可以通过声明式的方式...
压缩包中的"Mina_Test"可能是用于测试MINA2服务器和客户端通信的代码示例,通过运行和分析这个测试,可以更好地理解MINA2的工作原理和使用方式。 通过学习这个"MINA2 教程 socket",开发者可以掌握如何利用MINA2...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
在Android平台上,虽然Java原生的Socket API可以满足基本的网络通信需求,但Mina2.0提供了一套更高级、更灵活的抽象层,可以提升应用的性能和开发效率。 **一、Mina2.0的核心特性** 1. **事件驱动模型**:Mina采用...
在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...
在本教程中,我们将深入探讨如何整合Spring Boot与Mina框架,同时介绍Java NIO(非阻塞I/O)的基础知识。Spring Boot以其简洁、快速的起步方式深受开发者喜爱,而Mina则是一个强大的网络通信框架,常用于构建高性能...
通过示例中的时间服务器程序,我们可以了解到MINA如何抽象出事件模型来处理网络事件,实现客户端与服务端之间的通信,以及如何通过过滤器链来增强和扩展程序的功能。对于希望实现高性能网络应用的开发者而言,MINA...
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个... 客户端/服务端框架(典型的C/S架构) 网络套接字(networking socket)类库 事件驱动的异步API(注意:在JDK7中也新增了异步API)
这篇博客“Java Socket NIO研究”可能会探讨如何利用Java标准的Socket API以及NIO库来实现高性能、低延迟的网络通信。 Socket是基于TCP/IP协议的,它提供了进程间通信(IPC)的能力,使得运行在不同机器上的程序...