XSocket的学习和总结

xsocket源码和socket源码,文档 socket,xscoket技术详解,包括两个实例,服务端客户端相互收发信息,建立监听,建立连接等 立即下载

      xSocket是一个易于使用的基于NIO库来构建高性能,可扩展的网络应用。 它支持写入以及服务器端的应用,以直观的方式客户端应用程序。 检测问题,如低水平NIO选择编程,连接池管理,连接超时被封装的xSocket。  

我从它的官网上面下载了两个JAR一个是其核心JAR包 xSocket (core) 

另外一个JAR包是:xSocket multiplexed

先掌握其core部分然后再去学习其扩展部分的功能!

 

      随着xSocket你可以编写高性能,可扩展的客户端和服务器组件的自定义协议如SMTP服务器,代理服务器或客户端和服务器组件是一个基于。

      IDataHandler :服务端或者客户端端数据处理类;

     IConnectHandler 服务端或者客户端连接成功是处理操作。  

IIdleTimeoutHandler 请求处理超时才操作。  

IConnectionTimeoutHandler连接超时的操作

IDisconnectHandler 连接断开时的操作

IBlockingConnection 阻塞模式的连接
INonblockingConnection 非阻塞模式的连接

 

 

XSocket的ongoing实例:

服务端数据处理类:

Java代码   收藏代码
  1. package com.easyway.space.sockets.xsocket;  
  2.   
  3.   
  4. import java.io.IOException;  
  5. import java.nio.BufferUnderflowException;  
  6. import java.nio.channels.ClosedChannelException;  
  7.   
  8. import org.xsocket.MaxReadSizeExceededException;  
  9. import org.xsocket.connection.IConnectHandler;  
  10. import org.xsocket.connection.IConnectionTimeoutHandler;  
  11. import org.xsocket.connection.IDataHandler;  
  12. import org.xsocket.connection.IDisconnectHandler;  
  13. import org.xsocket.connection.IIdleTimeoutHandler;  
  14. import org.xsocket.connection.INonBlockingConnection;  
  15. /** 
  16.  * 服务端定义数据的处理类 
  17.  * @author longgangbai 
  18.  * 
  19.  */  
  20. public class ServerHandler implements IDataHandler ,IConnectHandler ,IIdleTimeoutHandler ,IConnectionTimeoutHandler,IDisconnectHandler {  
  21.   
  22.     /** 
  23.      * 即当建立完连接之后可以进行的一些相关操作处理。包括修改连接属性、准备资源、等! 
  24.      * 连接的成功时的操作 
  25.      */  
  26.     @Override  
  27.     public boolean onConnect(INonBlockingConnection nbc) throws IOException,  
  28.             BufferUnderflowException, MaxReadSizeExceededException {  
  29.         String  remoteName=nbc.getRemoteAddress().getHostName();  
  30.         System.out.println("remoteName "+remoteName +" has connected !");  
  31.             return true;  
  32.     }  
  33.     /** 
  34.      * 即如果失去连接应当如何处理? 
  35.      *需要实现 IDisconnectHandler  这个接口 
  36.      * 连接断开时的操作 
  37.      */  
  38.     @Override  
  39.     public boolean onDisconnect(INonBlockingConnection nbc) throws IOException {  
  40.        return false;  
  41.     }  
  42.     /** 
  43.      * 即这个方法不光是说当接收到一个新的网络包的时候会调用而且如果有新的缓存存在的时候也会被调用。而且 
  44.      *The onData will also be called, if the connection is closed当连接被关闭的时候也会被调用的! 
  45.      */  
  46.     @Override  
  47.     public boolean onData(INonBlockingConnection nbc) throws IOException,  
  48.             BufferUnderflowException, ClosedChannelException,  
  49.             MaxReadSizeExceededException {  
  50.          String data=nbc.readStringByDelimiter("|");  
  51.          nbc.write("--|server:receive data from client sucessful| -----");  
  52.          nbc.flush();  
  53.          System.out.println(data);  
  54.          return true;  
  55.     }  
  56.     /** 
  57.      * 请求处理超时的处理事件 
  58.      */  
  59.     @Override  
  60.     public boolean onIdleTimeout(INonBlockingConnection connection) throws IOException {  
  61.         // TODO Auto-generated method stub  
  62.         return false;  
  63.     }  
  64.     /** 
  65.      * 连接超时处理事件 
  66.      */  
  67.     @Override  
  68.     public boolean onConnectionTimeout(INonBlockingConnection connection) throws IOException {  
  69.         // TODO Auto-generated method stub  
  70.         return false;  
  71.     }  
  72.   
  73. }  

 

 

服务端类:

Java代码   收藏代码
  1. package com.easyway.space.sockets.xsocket;  
  2.   
  3. import java.net.InetAddress;  
  4. import java.util.Map;  
  5. import java.util.Map.Entry;  
  6.   
  7. import org.xsocket.connection.IServer;  
  8. import org.xsocket.connection.Server;  
  9. import org.xsocket.connection.IConnection.FlushMode;  
  10.   
  11. /** 
  12.  * 采用XSocket通讯的服务端 
  13.  * @author longgangbai 
  14.  * 
  15.  */  
  16. public class XSocketServer {  
  17.       
  18.     /**设置当前的端口*/  
  19.     private static final int PORT = 8014;  
  20.       
  21.     public static void main(String[] args) throws Exception {  
  22.         //注意其构造方法有多个。一般是使用这种构造方法出来的!  
  23.         //不过要注意一下java.net.InetAddress这个类的使用在初始化的时候需要捕获异常  
  24.         //可能是这个绑定的主机可能不存在之类的异常即UnknowHostNameException  
  25.         InetAddress address=InetAddress.getByName("localhost");  
  26.         //创建一个服务端的对象  
  27.         IServer srv = new Server(address,PORT,new ServerHandler());  
  28.         //设置当前的采用的异步模式  
  29.         srv.setFlushmode(FlushMode.ASYNC);  
  30.        try{  
  31.            // srv.run();   
  32.            // the call will not return  
  33.            // ... or start it by using a dedicated thread  
  34.             srv.start(); // returns after the server has been started  
  35.             System.out.println("服务器" + srv.getLocalAddress() +":"+PORT);   
  36.             Map<String, Class> maps=srv.getOptions();  
  37.             if(maps!=null){  
  38.                   
  39.                 for (Entry<String, Class> entry : maps.entrySet()) {  
  40.                     System.out.println("key= "+entry.getKey()+" value ="+entry.getValue().getName());  
  41.                 }  
  42.             }  
  43.             System.out.println("日志: " + srv.getStartUpLogMessage());  
  44.               
  45.        }catch(Exception e){  
  46.             System.out.println(e);  
  47.         }  
  48.          
  49.   }  
  50.   
  51. }  

 

 

 

客户端数据处理类:

Java代码   收藏代码
  1. package com.easyway.space.sockets.xsocket;  
  2.   
  3.   
  4. import java.io.IOException;  
  5. import java.nio.BufferUnderflowException;  
  6. import java.nio.channels.ClosedChannelException;  
  7.   
  8. import org.xsocket.MaxReadSizeExceededException;  
  9. import org.xsocket.connection.IConnectHandler;  
  10. import org.xsocket.connection.IDataHandler;  
  11. import org.xsocket.connection.IDisconnectHandler;  
  12. import org.xsocket.connection.INonBlockingConnection;  
  13. /** 
  14.  * 客户端定义数据的处理类 
  15.  * @author longgangbai 
  16.  * 
  17.  */  
  18. public class ClientHandler implements IDataHandler ,IConnectHandler ,IDisconnectHandler {  
  19.   
  20.     /** 
  21.      * 连接的成功时的操作 
  22.      */  
  23.     @Override  
  24.     public boolean onConnect(INonBlockingConnection nbc) throws IOException,  
  25.             BufferUnderflowException, MaxReadSizeExceededException {  
  26.         String  remoteName=nbc.getRemoteAddress().getHostName();  
  27.         System.out.println("remoteName "+remoteName +" has connected !");  
  28.        return true;  
  29.     }  
  30.     /** 
  31.      * 连接断开时的操作 
  32.      */  
  33.     @Override  
  34.     public boolean onDisconnect(INonBlockingConnection nbc) throws IOException {  
  35.         // TODO Auto-generated method stub  
  36.        return false;  
  37.     }  
  38.     /** 
  39.      *  
  40.      * 接收到数据库时候的处理 
  41.      */  
  42.     @Override  
  43.     public boolean onData(INonBlockingConnection nbc) throws IOException,  
  44.             BufferUnderflowException, ClosedChannelException,  
  45.             MaxReadSizeExceededException {  
  46.          String data=nbc.readStringByDelimiter("|");  
  47.          nbc.write("--|Client:receive data from server sucessful| -----");  
  48.          nbc.flush();  
  49.          System.out.println(data);  
  50.          return true;  
  51.     }  
  52.   
  53. }  

 

 

 

客户端类:

Java代码   收藏代码
  1. package com.easyway.space.sockets.xsocket;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.xsocket.connection.BlockingConnection;  
  6. import org.xsocket.connection.IBlockingConnection;  
  7. import org.xsocket.connection.INonBlockingConnection;  
  8. import org.xsocket.connection.NonBlockingConnection;  
  9. /** 
  10.  * 客户端接收服务端信息 
  11.  * @author longgangbai 
  12.  * IBlockingConnection:这个的话就是不支持事件回调处理机制的! 
  13.  *INonBlockingConnection:这个连接支持回调机制 
  14.  * 
  15.  *非阻塞的客户端是能够支持事件处理的方法的。即如果从网络通道中没有取到想要的数据就会自动退出程序 
  16.  */  
  17. public class XSocketClient {  
  18.     private static final int PORT = 8014;  
  19.     public static void main(String[] args) throws IOException {  
  20.             //采用非阻塞式的连接  
  21.             INonBlockingConnection nbc = new NonBlockingConnection("localhost", PORT, new ClientHandler());  
  22.              
  23.             //采用阻塞式的连接  
  24.             //IBlockingConnection bc = new BlockingConnection("localhost", PORT);  
  25.              //一个非阻塞的连接是很容易就变成一个阻塞连接  
  26.             IBlockingConnection bc = new BlockingConnection(nbc);  
  27.            //设置编码格式  
  28.             bc.setEncoding("UTF-8");  
  29.             //设置是否自动清空缓存  
  30.             bc.setAutoflush(true);  
  31.             //向服务端写数据信息  
  32.              for (int i = 0; i < 100; i++) {  
  33.                  bc.write(" client | i |love |china !..." +i);  
  34.             }  
  35.              //向客户端读取数据的信息  
  36.            byte[] byteBuffers= bc.readBytesByDelimiter("|", "UTF-8");  
  37.            //打印服务器端信息  
  38.            System.out.println(new String(byteBuffers));  
  39.            //将信息清除缓存,写入服务器端  
  40.            bc.flush();  
  41.            bc.close();  
  42.     }  
  43.   
  44. }  

 ===================================================================================================================

 

XSocket的学习和总结(二)

分类: xsocket   951人阅读  评论(0)  收藏  举报
  
2011年04月08日 星期五 下午 02:49

客户端数据处理类:

Java代码
  1. package com.easyway.space.sockets.xsocket;   
  2.   
  3.   
  4. import java.io.IOException;   
  5. import java.nio.BufferUnderflowException;   
  6. import java.nio.channels.ClosedChannelException;   
  7.   
  8. import org.xsocket.MaxReadSizeExceededException;   
  9. import org.xsocket.connection.IConnectHandler;   
  10. import org.xsocket.connection.IDataHandler;   
  11. import org.xsocket.connection.IDisconnectHandler;   
  12. import org.xsocket.connection.INonBlockingConnection;   
  13. /**  
  14.  * 客户端定义数据的处理类  
  15.  * @author longgangbai  
  16.  *  
  17.  */  
  18. public class ClientHandler implements IDataHandler ,IConnectHandler ,IDisconnectHandler {   
  19.   
  20.     /**  
  21.      * 连接的成功时的操作  
  22.      */  
  23.     @Override  
  24.     public boolean onConnect(INonBlockingConnection nbc) throws IOException,   
  25.             BufferUnderflowException, MaxReadSizeExceededException {   
  26.         String  remoteName=nbc.getRemoteAddress().getHostName();   
  27.         System.out.println("remoteName "+remoteName +" has connected !");   
  28.        return true;   
  29.     }   
  30.     /**  
  31.      * 连接断开时的操作  
  32.      */  
  33.     @Override  
  34.     public boolean onDisconnect(INonBlockingConnection nbc) throws IOException {   
  35.         // TODO Auto-generated method stub   
  36.        return false;   
  37.     }   
  38.     /**  
  39.      *   
  40.      * 接收到数据库时候的处理  
  41.      */  
  42.     @Override  
  43.     public boolean onData(INonBlockingConnection nbc) throws IOException,   
  44.             BufferUnderflowException, ClosedChannelException,   
  45.             MaxReadSizeExceededException {   
  46.          String data=nbc.readStringByDelimiter("|");   
  47.          nbc.write("--|Client:receive data from server sucessful| -----");   
  48.          nbc.flush();   
  49.          System.out.println(data);   
  50.          return true;   
  51.     }   
  52.   
  53. }  
[java]  view plain copy
  1. package com.easyway.space.sockets.xsocket;  
  2.   
  3.   
  4. import java.io.IOException;  
  5. import java.nio.BufferUnderflowException;  
  6. import java.nio.channels.ClosedChannelException;  
  7.   
  8. import org.xsocket.MaxReadSizeExceededException;  
  9. import org.xsocket.connection.IConnectHandler;  
  10. import org.xsocket.connection.IDataHandler;  
  11. import org.xsocket.connection.IDisconnectHandler;  
  12. import org.xsocket.connection.INonBlockingConnection;  
  13. /** 
  14.  * 客户端定义数据的处理类 
  15.  * @author longgangbai 
  16.  * 
  17.  */  
  18. public class ClientHandler implements IDataHandler ,IConnectHandler ,IDisconnectHandler {  
  19.   
  20.  /** 
  21.   * 连接的成功时的操作 
  22.   */  
  23.  @Override  
  24.  public boolean onConnect(INonBlockingConnection nbc) throws IOException,  
  25.    BufferUnderflowException, MaxReadSizeExceededException {  
  26.   String  remoteName=nbc.getRemoteAddress().getHostName();  
  27.   System.out.println("remoteName "+remoteName +" has connected !");  
  28.        return true;  
  29.  }  
  30.     /** 
  31.      * 连接断开时的操作 
  32.      */  
  33.  @Override  
  34.  public boolean onDisconnect(INonBlockingConnection nbc) throws IOException {  
  35.   // TODO Auto-generated method stub  
  36.     return false;  
  37.  }  
  38.  /** 
  39.   *  
  40.   * 接收到数据库时候的处理 
  41.   */  
  42.  @Override  
  43.  public boolean onData(INonBlockingConnection nbc) throws IOException,  
  44.    BufferUnderflowException, ClosedChannelException,  
  45.    MaxReadSizeExceededException {  
  46.    String data=nbc.readStringByDelimiter("|");  
  47.    nbc.write("--|Client:receive data from server sucessful| -----");  
  48.    nbc.flush();  
  49.          System.out.println(data);  
  50.          return true;  
  51.  }  
  52.   
  53. }  

客户端类:

Java代码
  1. package com.easyway.space.sockets.xsocket;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import org.xsocket.connection.BlockingConnection;   
  6. import org.xsocket.connection.IBlockingConnection;   
  7. import org.xsocket.connection.INonBlockingConnection;   
  8. import org.xsocket.connection.NonBlockingConnection;   
  9. /**  
  10.  * 客户端接收服务端信息  
  11.  * @author longgangbai  
  12.  * IBlockingConnection:这个的话就是不支持事件回调处理机制的!  
  13.  *INonBlockingConnection:这个连接支持回调机制  
  14.  *  
  15.  *非阻塞的客户端是能够支持事件处理的方法的。即如果从网络通道中没有取到想要的数据就会自动退出程序  
  16.  */  
  17. public class XSocketClient {   
  18.     private static final int PORT = 8014;   
  19.     public static void main(String[] args) throws IOException {   
  20.             //采用非阻塞式的连接   
  21.             INonBlockingConnection nbc = new NonBlockingConnection("localhost", PORT, new ClientHandler());   
  22.               
  23.             //采用阻塞式的连接   
  24.             //IBlockingConnection bc = new BlockingConnection("localhost", PORT);   
  25.              //一个非阻塞的连接是很容易就变成一个阻塞连接   
  26.             IBlockingConnection bc = new BlockingConnection(nbc);   
  27.            //设置编码格式   
  28.             bc.setEncoding("UTF-8");   
  29.             //设置是否自动清空缓存   
  30.             bc.setAutoflush(true);   
  31.             //向服务端写数据信息   
  32.              for (int i = 0; i < 100; i++) {   
  33.                  bc.write(" client | i |love |china !..." +i);   
  34.             }   
  35.              //向客户端读取数据的信息   
  36.            byte[] byteBuffers= bc.readBytesByDelimiter("|", "UTF-8");   
  37.            //打印服务器端信息   
  38.            System.out.println(new String(byteBuffers));   
  39.            //将信息清除缓存,写入服务器端   
  40.            bc.flush();   
  41.            bc.close();   
  42.     }   
  43.   
  44. }  

 

代码如上,如有问题,欢迎商讨, 谢谢!

xSocket_v2.5.5-api.chm 一个使java socket编程更简化的工具包API说明文档 立即下载

相关推荐

轻量级JAVA scoket 服务器XSOCKET

轻量级JAVA scoket 服务器XSOCKET

Xsocket

xSocket是一个易于使用的基于NIO库来构建高性能,可扩展的网络应用。 它支持写入以及服务器端的应用,以直观的方式客户端应用程序。 检测问题,如低水平NIO选择编程,连接池管理,连接超时被封装的xSocket。 pom.xml <dependency> <groupId>org.xsocket</groupId> <artif...

weixin_43355440的博客 1820

基于XSocket、mdb、zq构建端到端高性能可视化量化分析交易系统

基于XSocket、mdb、zq构建端到端高性能可视化量化分析交易系统(包含服务器、客户端,支持ExcelVBAPythonCC++开发).zip

XSocket的学习和总结(二)

2011年04月08日 星期五 下午 02:49 客户端数据处理类: Java代码 package com.easyway.space.sockets.xsocket;          import java.io.IOExc

lizhi200404520的专栏 6236

java源码:NIO网络框架 xSocket.rar

java源码:NIO网络框架 xSocket.rar

13.5元低成本模拟乘法器AD633JN实测:手把手教你避开那些坑

本文以13.5元低成本模拟乘法器AD633JN为核心,通过实测搭建混沌电路的全过程,手把手教你避开电源灌流、芯片发烫、输入偏置等常见陷阱。文章详细剖析了AD633JN的比例因子、输入阻抗等关键特性,并提供了正确的电源去耦、信号耦合及稳定性布线方案,旨在帮助硬件爱好者与工程师高效利用这款高性价比芯片,节省调试时间与成本。

weixin_28432777的博客 519

XSocket的学习和总结(一)

2011年04月08日 星期五 下午 02:48 xSocket是一个易于使用的基于NIO库来构建高性能,可扩展的网络应用。 它支持写入以及服务器端的应用,以直观的方式客户端应用程序。 检测问题,如低水平NIO选择编程,连接池管理,连接超时被封装的xSo

lizhi200404520的专栏 8787

Mid-360与FAST-LIO2实战:从点云采集到高精度建图全流程解析

本文详细解析了使用Livox Mid-360激光雷达与FAST-LIO2算法实现高精度实时建图的全流程。内容涵盖硬件准备、软件环境搭建、算法部署配置、数据采集实战,并重点探讨了多楼层场景下的参数调优与误差抑制策略,为机器人及无人机三维感知应用提供了实用指南。

prometheus9mon的博客 415

java nio框架mina_几种Java NIO框架的比较(zz)

问题:生活中工作中,会有人问我javaNIO框架里面NettyMinaxSocketGrizzly等等哪个比较好?在这里写一下自己的感受,也算是总结一下吧在我的印象中。不管是什么NIO框架。本身其实都是对Java底层的一种在封装。封装一套更简便,更易于扩展的一套东西以方便开发者使用。所以性能上也许会有所差异,但是绝对没有java和C++之间这么多。(代码写的太烂的除外,不过想要使用ja...

weixin_42370320的博客 542

安卓APP通过CH340实现USB串口通信与设备检测

本文详细介绍了安卓APP通过CH340芯片实现USB串口通信与设备检测的完整流程。从CH340芯片的基础原理到开发环境搭建,再到串口通信的具体实现和错误处理,提供了全面的技术指导。文章还分享了USB热插拔处理、自动重连策略以及性能优化等实战技巧,帮助开发者高效完成安卓与嵌入式设备的通信开发。

weixin_42531925的博客 381

CTransformers: 高效的Python语言模型绑定库

CTransformers是一个为C/C++实现的Transformer模型提供Python绑定的开源库。它基于GGML库构建,旨在为开发者提供一种高效且易用的方式来在Python中使用各种流行的语言模型。支持多种流行的语言模型,如GPT-2、LLaMA、Falcon等提供统一的简单API接口支持GPU加速(CUDA和Metal)与Hugging Face Transformers和LangChain集成支持流式输出和嵌入计算。

helloaiworld的博客 1269

java nio 框架_几种Java NIO框架的比较(zz)

问题:生活中工作中,会有人问我javaNIO框架里面NettyMinaxSocketGrizzly等等哪个比较好?在这里写一下自己的感受,也算是总结一下吧在我的印象中。不管是什么NIO框架。本身其实都是对Java底层的一种在封装。封装一套更简便,更易于扩展的一套东西以方便开发者使用。所以性能上也许会有所差异,但是绝对没有java和C++之间这么多。(代码写的太烂的除外,不过想要使用ja...

weixin_39631689的博客 957

大地坐标系与经纬度转换(一):大地坐标系简介

一、大地坐标系 大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系。地面点的位置用大地经度、大地纬度和大地高度表示。 二、地心坐标系 ...

qq_42895926的博客 6万+

mina 和 xsocket

实在无聊,考虑把当前应用的通讯模式由http移植为socket, 服务器这块因为对NIO并不熟悉,所以考虑使用现成的网络通讯框架进行移植,花了点时间测试比较流行的mina和xsocket。== 相同点 ==  1. 都对nio进行了有效屏蔽, 可以简化开发过程, 对于文本流模式的应用,两者都非常简单,实现一个基本的handle就可以  2. 提供了一些常见的辅助功能,比如日

gaoge19861207的专栏 2480

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

wzk4869的博客 3022

OpenCV实现物体尺寸的测量

物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。

qq_53545309的博客 9161

xSocket 教程

Connection-Oriented网络应用教程 这是一个使用xSocket2.0编写connection-oriented网络应用的初学者教程。 如果您需要更多的帮助,不要犹豫,使用 xSocket的支持论坛 。xsocket-develop@lists.sourceforge.net 核心功能 主要的抽象,以支持面向流的沟通是 连接 。 读取数据,并书面使用 IBlocki...

胖头鱼 1926

SKUA-GOCAD入门教程-第六节

DisplayElements窗口是用于浏览和处理项目数据的工具,包含多个数据浏览器,如模型列表、对象、未分类对象、属性数据及资源数据。

江洋大葱的博客 984
上一篇: using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
下一篇: xSocket multiplexed介绍
zljjava
博客等级 码龄15年 155粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值