`
zzc1684
  • 浏览: 1230961 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

nio/mina(四)客户端socket与mina服务端通信

    博客分类:
  • Mina
阅读更多

 

客户端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服务端通信

    Java客户端Socket与Mina服务端通信是网络编程中常见的应用场景,尤其在开发分布式系统或实时数据传输时。这里我们将深入探讨这两个技术,并了解如何通过它们建立保持长连接的通信。 首先,Socket是Java中用于实现...

    mina框架中socket使用,有服务端和客户端。

    mina框架是Apache组织开发的一个网络通信框架,它基于Java NIO(非阻塞I/O)构建,用于简化网络编程,尤其是TCP和UDP协议的应用开发。本项目提供了服务端和客户端的示例,使得开发者能够更好地理解和应用MINA框架。 ...

    Mina+Socket通信

    文件"MinaSocket"可能包含了实现上述功能的详细代码,包括服务端的Acceptor配置、过滤器设置、事件处理器编写,以及客户端的Socket连接、数据发送和接收等。通过阅读和理解这些代码,你可以更好地掌握Mina与Socket...

    网络编程(socket、NIO、mina)---demo

    总结来说,这个"网络编程(socket、NIO、mina)---demo"涵盖了网络编程的基础与进阶,从基础的Socket通信,到提高性能的NIO,再到高级的Mina框架,这些都是开发分布式系统、网络服务和实时通信应用不可或缺的技术。...

    mina传文件案例,客户端加服务端

    在本案例中,客户端将通过Socket连接到Mina服务端,发送文件请求,并传输文件内容。 三、Mina服务端实现 1. 初始化IoAcceptor:Mina服务端首先需要创建一个IoAcceptor实例,用于监听特定端口的连接请求。通常使用...

    mina 服务器socket客服端发消息

    以上就是使用Java Mina框架创建一个简单的Socket服务端和客户端的实现。在实际应用中,可能还需要考虑异常处理、心跳机制、多线程处理、消息序列化与反序列化等问题。Mina提供的API非常灵活,可以根据需求进行扩展和...

    原创nio socket mina+javascript+flash实现commet长连接网页聊天室

    【标题】"原创nio socket mina+javascript+flash实现commet长连接网页聊天室"揭示了一个基于Java NIO(Non-blocking I/O)的Socket通信框架Mina与JavaScript、Flash技术结合,实现COMET(Comet是使服务器向浏览器推...

    mina及时推送客户端服务端实现

    Apache MINA(Multi-purpose ...通过学习和实践"mina及时推送客户端服务端实现"项目,开发者不仅能掌握MINA框架的基本用法,还能深入了解TCP长连接、实时推送的原理与实现,为构建高效、稳定的网络应用打下坚实基础。

    Java视频教程 Java游戏服务器端开发 Netty NIO AIO Mina视频教程

    01、Mina服务端helloWorld入门.flv 02、Mina客户端helloWorld入门.flv 03、Mina整体体系结构分析.flv 04、Mina学习之长短连接.flv 05、Mina学习之MinaIOService接口.flv 06、Mina学习之MinaIOFilter接口.flv ...

    socket mina测试框架

    Socket Mina测试框架是一个强大的网络通信应用框架,主要用于简化Java应用程序与远程服务器之间的通信。它提供了高度可扩展和高性能的I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层的网络实现细节。Mina...

    一个经典的socket通信程序

    3. **客户端与服务端**:在Socket通信中,客户端通常发起连接请求,而服务端则等待并响应这些请求。客户端代码通常包含创建Socket、连接到服务器、发送数据、接收数据和关闭连接等步骤;服务端则需要监听特定端口,...

    apache mina-spring 服务端程序

    在Mina中,Socket通信是通过一个事件驱动模型实现的,该模型基于I/O多路复用技术,如Java的NIO(Non-blocking I/O)。这种模型可以处理大量的并发连接,且资源消耗较低。Spring的集成使得开发者可以通过声明式的方式...

    MINA2 教程 socket

    压缩包中的"Mina_Test"可能是用于测试MINA2服务器和客户端通信的代码示例,通过运行和分析这个测试,可以更好地理解MINA2的工作原理和使用方式。 通过学习这个"MINA2 教程 socket",开发者可以掌握如何利用MINA2...

    mina实例、资源包、学习文档

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...

    Android Java Socket框架 Mina2.0

    在Android平台上,虽然Java原生的Socket API可以满足基本的网络通信需求,但Mina2.0提供了一套更高级、更灵活的抽象层,可以提升应用的性能和开发效率。 **一、Mina2.0的核心特性** 1. **事件驱动模型**:Mina采用...

    mina服务端例子

    在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...

    springboot 整合mina 源码,nio通讯基础教程,mina框架基础教程.rar

    在本教程中,我们将深入探讨如何整合Spring Boot与Mina框架,同时介绍Java NIO(非阻塞I/O)的基础知识。Spring Boot以其简洁、快速的起步方式深受开发者喜爱,而Mina则是一个强大的网络通信框架,常用于构建高性能...

    基于MINA构建简单高性能的NIO应用

    通过示例中的时间服务器程序,我们可以了解到MINA如何抽象出事件模型来处理网络事件,实现客户端与服务端之间的通信,以及如何通过过滤器链来增强和扩展程序的功能。对于希望实现高性能网络应用的开发者而言,MINA...

    MINA通讯框架的两个简单实例和文档

    Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个... 客户端/服务端框架(典型的C/S架构)  网络套接字(networking socket)类库  事件驱动的异步API(注意:在JDK7中也新增了异步API)

    java socket nio 研究

    这篇博客“Java Socket NIO研究”可能会探讨如何利用Java标准的Socket API以及NIO库来实现高性能、低延迟的网络通信。 Socket是基于TCP/IP协议的,它提供了进程间通信(IPC)的能力,使得运行在不同机器上的程序...

Global site tag (gtag.js) - Google Analytics