`
uu011
  • 浏览: 30745 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

xsocket基础学习一

    博客分类:
  • java
 
阅读更多
1、这个开源的框架只需要有一个J2SE5.0就行了不需要其他的JAR支持。
我从它的官网上面下载了两个JAR一个是其核心JAR包xSocket (core)
下载地址是:http://sourceforge.net/projects/xsocket/files/xsocket%202.x/2.7.2/xSocket-2.7.2.jar/download

另外一个JAR包是:xSocket multiplexed
下载地址是http://sourceforge.net/projects/xsocket/files/xsocket%202.x%20-%20multiplexed/2.1.5/xSocket-multiplexed-2.1.5.jar/download (这个JAR包比较小)

先掌握其core部分然后再去学习其扩展部分的功能!
从其官方帮助文档上面介绍:
Data will be read and written by using a IBlockingConnection or a INonblockingConnection object (数据的读写是通过这两个对象实现的!)

DEMO示例

1. a simple tcp/delimiter-based server example
First, define the handler class which implements the desired handler interface e.g. IDataHandler, IConnectHandler, IIdleTimeoutHandler or IConnectionTimeoutHandler. The DataHandler will be called if data has been received for a connection (which will be passed over).
理解:如果想要开发这种网络通讯程序的话是需要掌握事件处理机制的。即当成功连接成功了怎么处理?当数据获取到了又如何处理?等等所以需要事件处理类的而这些类是必须得实现定义的相关接口如
IDataHandler, IConnectHandler, IIdleTimeoutHandler or IConnectionTimeoutHandler
EX:
class EchoHandler implements IDataHandler {
  //拿到数据之后我们是这样处理这些数据的!
  public boolean onData(INonBlockingConnection nbc)
           throws IOException,
           BufferUnderflowException,
           MaxReadSizeExceededException {

     String data = nbc.readStringByDelimiter("\r\n");
     nbc.write(data + "\r\n");
     return true;
  }
}

定义了事件处理方法之后就可以写一个服务了。这个就跟Python里面的RPYC是一样的即定义好一个回调事件处理方法
之后就可以进行定义好server对象了!
EX:
public static void main(String[] args) {
try {
InetAddress address = InetAddress.getByName("localhost");
IServer srv = new Server(address,8090,new EchoHandler());
srv.run();
} catch (Exception e) {
System.out.println(e.toString());
}
}
注意其构造方法有多个。一般是使用这种构造方法出来的!
不过要注意一下java.net.InetAddress这个类的使用在初始化的时候需要捕获异常
可能是这个绑定的主机可能不存在之类的异常即UnknowHostNameException

2. Semantic of the DataHandler's onData method
the onData method can also be called without receiving new network packets, as long as xSocket's internal read buffer is not empty.
即这个方法不光是说当接收到一个新的网络包的时候会调用而且如果有新的缓存存在的时候也会被调用。而且
The onData will also be called, if the connection is closed当连接被关闭的时候也会被调用的!

3. Writing a blocking client
IBlockingConnection bc = new BlockingConnection(host, port);
String req = "Hello server";
bc.write(req + "\r\n");

// read the whole logical part by waiting (blocking) until
// the required data have been received
String res = bc.readStringByDelimiter("\r\n");

assert (req.equals(res));

IBlockingConnection:这个的话就是不支持事件回调处理机制的!
4. Writing a non-blocking client
By performing the a BlockingConnection's read method, the method call blocks until data has been received or a time out has been occurred
(刚才我试过了 把服务器输出 的数据格式与客房端上传的数据格式不一样导致了 客户端一直在阻塞状态了直到设置的超时值才停止。这样感觉好像不太好。要一直等)
非阻塞的客户端是能够支持事件处理的方法的。即如果从网络通道中没有取到想要的数据就会自动退出程序
public class ClientMain {
    public static void main(String[] args) {
        try {
            IDataHandler clientHandler = new IDataHandler() {
                public boolean onData(INonBlockingConnection nbc) throws IOException,BufferUnderflowException,MaxReadSizeExceededException {
                    String res = nbc.readStringByDelimiter("\r\n");
                    System.out.println(res);
                    return true;
                }
            };  //定义一个事件处理类。原来JAVA中也可以这样来定义的跟JS是一样的哦!
            INonBlockingConnection nbc = new NonBlockingConnection("localhost",8090,clientHandler);
            nbc.write("hello" + "\r\n");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
一个非阻塞的连接是很容易就变成一个阻塞连接的看下面的代码:
INonBlockingConnection nbc = ...  //构造出来一个非阻塞对象
// wrapping an existing non-blocking connection by a BlockingConnection
IBlockingConnection bc = new BlockingConnection(nbc);//得到一个阻塞对象即实现一个非阻塞对象转换成一个阻塞对象!
bc.readInt();//又会进入一个新的阻塞期!

以上都是讲了一些在客户端的阻塞编程与非阻塞编程技术。下面讲一下在服务端的阻塞与非阻塞编程技术!
6. Wrap a non-blocking connection on the server-side
Typically the onConnect() method will be used to create a BlockingConnection on the server-side.
class ConnectHandler implements IConnectHandler {

   public boolean onConnect(INonBlockingConnection nbc) throws IOException {

      IBlockingConnection bc = new BlockingConnection(nbc);
      //

      return true;
   }
7. Handling connect
如果要对连接进行一些处理。可以实现这个接口IConnectHandler
public boolean onConnect(INonBlockingConnection nbc) throws IOException {
        //... e.g. open resources
        return true;
    }
通常是能够在这个方法里面去做 checks based on the new connection, to modifiy
        connection properties, to prepare resources, to set up backend
        connections or to write greeting messages
即当建立完连接之后可以进行的一些相关操作处理。包括修改连接属性、准备资源、等!
8. Handling disconnect
即如果失去连接应当如何处理?
需要实现 IDisconnectHandler  这个接口
A disconnect occurs in three ways:
• the client-side initiates the disconnect by active closing the connection. In this case the onDisconnect method will be called immediately
• the connection breaks or the peer disconnects improperly and the Java VM detects the broken connection. In this case the onDisconnect method will be called, when the broken connection is detected
• the connection breaks or the peer disconnects improperly and the JavaVM doesn't detect the broken connection. In this case the onDisconnect method will not be called. To handle this scenario the handler should implement the IIdleTimeoutHandler and/or IConnectionTimeoutHandler interface.(如果有一些异常没有办法探测到的话就要考虑走超时机制了!)
什么时候会触发这个事件呢?


9. Asynchronous Connect

http://xsocket.sourceforge.net/
分享到:
评论

相关推荐

    tcp协议使用xsocket的demo

    "tcp协议使用xsocket的demo"是一个实践性强、教学价值高的项目,它涵盖了SpringBoot、TCP通信和模块化开发等多个核心知识点,对于想要深入了解Java网络编程和SpringBoot集成的开发者来说,这是一个极好的学习资源。

    XSocket.rar

    在IT行业中,网络编程是不可或缺的一部分,而Socket编程则是实现网络通信的基础。XSocket.rar文件提供的内容显然聚焦于Socket编程的实践,特别是针对TCP/IP协议的实现,以及客户端(Client)与服务器端(Server)...

    ws(websocket)例子(xsocket\xlightweb)

    1. WebSocket基础知识: WebSocket协议是基于TCP的,它定义了一个新的通信层,使得客户端和服务器能够保持长连接,从而减少了HTTP的开销。一旦WebSocket连接建立,数据就可以双向传输,而不需要为每个消息都创建新...

    xsocket源码和socket源码,文档

    总之,这个资源包为你提供了一个很好的学习平台,通过实践和研究源码,你将能够深入理解Socket和XSocket编程,进一步提升你的网络编程技能。记得要结合理论知识和实际操作,才能更好地消化和掌握这些内容。

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

    1. **Java NIO基础** Java NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据读写的基础,缓冲区用于存储数据,而选择器则允许单个线程监控多个通道的事件,从而提高了多路复用...

    xsocket.7z

    本文将深入探讨一个名为“XSocket”的C++库,它为开发者提供了一种在Linux和Windows平台上进行高效、便捷的Socket编程的方法。 首先,我们来理解一下“XSocket”的核心概念。XSocket是由C++编写的一个轻量级库,其...

    基于Java的实例开发源码-NIO网络框架 xSocket.zip

    Java NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java应用程序提供了非阻塞I/O操作的能力,...通过深入学习和实践xSocket源码,不仅可以提升Java NIO的技术能力,还可以为将来构建自己的网络框架打下坚实基础。

    基于Java的实例源码-NIO网络框架 xSocket.zip

    1. **Java NIO基础**: - **通道(Channels)**:通道是数据传输的路径,可以连接到不同类型的I/O设备,如文件、套接字、网络接口等。 - **缓冲区(Buffers)**:缓冲区是数据存储的容器,通过通道读写数据时,...

    NIO网络框架 xSocket

    不过,使用任何框架都需要权衡,xSocket虽然提供了很多便利,但学习曲线可能较陡峭,需要开发者具备一定的Java NIO基础。总的来说,对于追求高性能、高并发的网络应用,xSocket是一个值得考虑的解决方案。

    windows的socket,线程等的封装库

    1. **Socket编程基础**: - Socket,也称为套接字,是网络通信的基本单元,用于不同计算机之间的数据传输。在Windows环境下,Socket API遵循Berkeley Sockets模型,提供了创建、连接、监听、接受和发送数据等功能。...

    JAVA上百实例源码以及开源项目源代码

    输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下...

    library collection-开源

    例如,"xsocket.pas"可能是一个包含网络套接字操作的组件,它可能封装了TCP/IP或UDP通信的基础功能,让开发者能够更容易地构建网络应用。"xserial.pas"可能涉及串行通信的实现,这在物联网设备或者嵌入式系统中很...

Global site tag (gtag.js) - Google Analytics