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

创建非阻塞的Socket服务器<二>

阅读更多
今天在公交车上遇到了扒手!司机提示了好多次说“请注意扒手”,我猜想司机一定看到了"熟悉的面孔"所以才这么说的。。。结果不出所料,一个男同胞的手机被扒了,司机很恼怒,汗。。。算了不说了。。说了伤心,尽管不是我的手机被偷!

上一篇文章我对NIO的包进行全面的概括,下面我们就详细的讲讲这些类。

首先讲一下Buffer 这个类是一个抽象类,继承自Object!

这个类是缓冲区由于数据的输入和输出相对于其他的操作是很消耗资源的,而缓冲区正好可以帮助我们改善这些情况。
它从两个方面来提升效率:
减少对实际物理内存的频繁操作
缓冲区被创建就分配了内存,他能够被重用,而不至于让我们频繁的动态创建和回收。
Buffer这个类的作用就类似与BufferedInputStream 和 BufferedOutputStream BufferedRead
BufferedWriter.

来看看API 中 Buffer的具体方法和属性。
capacity //定义了缓冲区的容量,也就是可以保存多少数据
limit//定义了缓冲区的极限,当前缓冲区的终点
postion//读取的位置

那么怎么改变他们呢?
clear();//设置极限为容量 并把将要读取的位置设置为0
flip();//设置极限为位置,并把位置设置为0
rewind();//不修改极限,但把位置设置为0

前面已经提到,Buffer是一个抽象类所以他不能实例化,她有多个子类,每一种基本类型都有它对应的缓冲类但是boolean除外!此外还有就是ByteBuffer这个子类,它定义了存放数据的字节单元,但是他不能实例化只能通过静态方法来得到他的对象集体方法如下:
allocate(int capacity)//返回指定大小的缓冲区
allocateDirect(int capcaity)//返回新的缓冲区

以上两个方法我并没有找到具体的区别性能上也米有测试,希望做过研究的同学给说一下!
先说到这里。。心情不好!等我调整一下心情在写~


好了接着说其他的类,Charset 这个类

它包含的方法我们这里只需要记住两个就行了
encode(String str) //返回的是ByteBuffer  
decode(ByteBuffer bb)//返回的是CharBuffer

不管是ByteBuffer 还是CharBuffer 都是Buffer的子类。那么推测Buffer的另一种用途就是帮助这些基本类型之间进行转换,我们可以按照指定的形式来转换自己的数据!




















分享到:
评论

相关推荐

    Linux下的Socket编程实例(阻塞和非阻塞)

    阻塞和非阻塞Socket Socket 编程中有两种方式:阻塞(Blocking)和非阻塞(Non-Blocking)。阻塞 Socket 指的是在执行某个操作时,程序将等待该操作完成,而非阻塞 Socket 则可以继续执行其他操作,不会被阻塞。 ...

    C++ socket 阻塞与非阻塞

    本话题主要探讨的是在C++ Socket编程中的阻塞模式与非阻塞模式,以及它们在多线程环境下的应用和资源管理。 一、阻塞与非阻塞模式 1. **阻塞模式**:在阻塞模式下,当一个Socket调用(如recv或send)执行时,如果...

    socket 多线程 例程 非阻塞模式

    这个示例中的源代码包含了客户端和服务器端的实现,通过运行这些代码,你可以实际观察到多线程非阻塞模式下的socket通信。客户端发送数据到服务器,而服务器接收并回应,整个过程是并行且高效的。 总之,"socket多...

    非阻塞Socket的应用

    1. **服务器端**:创建并监听一个非阻塞Socket,通过I/O复用或异步I/O来处理来自多个客户端的连接请求。当有新的连接到达或数据可读时,服务器会处理这些事件,并将数据转发给其他客户端或存储到数据库。 2. **...

    非阻塞模式socket程序

    回调函数在非阻塞Socket编程中起着关键作用。当接收到数据或发生特定事件(如连接、断开连接)时,程序会通过预先注册的回调函数通知应用层。这种方式使得处理网络事件更加灵活,应用可以根据自身需求定制事件处理...

    基于多线程的非阻塞 socket 编程

    # 基于多线程的非阻塞Socket编程教程 ## 简介 基于多线程的非阻塞Socket编程是一种高效处理网络通信的技术,结合了多线程编程和非阻塞I/O。它用于构建高性能的网络服务器和客户端,可以同时处理多个连接而不使线程...

    Socket通信(TCP)非阻塞模式-select模型

    本资源是关于 Socket 通信的非阻塞模式下的 Select 模型的示例代码,基于 TCP 协议,分为服务器端和客户端。该示例代码展示了如何使用 Select 模型实现非阻塞 Socket 通信。 知识点1:非阻塞模式 非阻塞模式是指在...

    异步非阻塞socket聊天室程序

    "异步非阻塞socket聊天室程序"是一个使用C++语言,并基于MFC(Microsoft Foundation Classes)库构建的项目,旨在实现高效的多用户通信。下面将详细阐述这个程序背后的关键知识点。 首先,我们关注的是"异步非阻塞...

    C++封装类CWSocket(多线程 非阻塞)

    通过阅读和分析这些代码,我们可以深入了解如何在C++中实现多线程、非阻塞的socket类,以及如何添加超时控制。 总的来说,C++封装类CWSocket的实现结合了多线程、非阻塞I/O和超时处理等关键技术,旨在提供一个高效...

    Android Socket服务器客户端编程

    在Android中建立一个Socket服务器,我们需要创建一个ServerSocket对象,指定一个端口号,并监听这个端口以接受来自客户端的连接请求。`MultiThreadServer`示例可能包含一个名为`ServerActivity`的类,该类在后台运行...

    服务器和客户端进程的简单SOCKET通讯

    - **连接(Connect)**:客户端创建一个Socket,通过connect函数向服务器发起连接请求,指定服务器的IP地址和端口号。 - **发送与接收**:连接成功后,客户端和服务器都可以通过Socket对象进行数据的发送和接收。 ...

    基于Socket的WEB服务器

    在这个场景中,非阻塞模式的Socket被用来提高服务器的性能和效率,使得服务器能够处理更多的并发连接。 首先,我们来理解一下什么是Socket。Socket是计算机网络中的通信端点,允许两个程序通过网络交换数据。在TCP/...

    非阻塞 udp server

    创建非阻塞UDP服务器的关键步骤如下: 1. **创建套接字**:使用`socket()`函数创建一个UDP套接字,并设置其为非阻塞模式。在Linux中,可以通过`fcntl()`函数配合`F_SETFL`标志和`O_NONBLOCK`选项实现。 2. **绑定...

    socket 通信

    在提供的"NewSS"文件中,可能包含了服务器端的代码实现,展示了如何创建并管理非阻塞的socket服务器。另一方面,"NewCS"文件可能包含了客户端的代码,展示了如何与服务器建立连接并进行通信。 总的来说,理解和掌握...

    socket 客户端

    而非阻塞式Socket则不同,当尝试读取或写入数据时,如果没有准备好,会立即返回,允许程序执行其他操作。 **创建一个简单的阻塞式Socket客户端** 以下是一个基于C++的简单阻塞式socket客户端示例,名为"sock2客户端...

    socket 服务器和客户端通讯

    在这个主题中,我们将深入探讨Socket服务器和客户端的异步通讯机制。 首先,我们需要理解什么是Socket。Socket是Internet上的进程间通信(IPC)的一种接口,它允许两个网络应用程序通过TCP/IP协议进行通信。在操作...

    Winsocket入门教程二:非阻塞式服务器和客户端程序TCP.doc

    Winsocket 非阻塞式服务器和客户端程序设计 Winsocket 是 Windows 操作系统中的网络编程接口,提供了各种网络编程功能,包括套接字编程、名称解析、网络信息查询等。Winsocket 的应用非常广泛,几乎所有的网络应用...

    Socket异步服务器源码

    Socket异步服务器是一种高效、非阻塞的网络通信方式,常用于处理大量并发连接请求。在本文中,我们将深入探讨Socket异步服务器的工作原理、核心概念以及如何利用提供的源码进行实际开发。 首先,让我们理解Socket的...

    Socket接受数据超时

    为了实现非阻塞的超时控制,我们可以利用多线程和异步编程模型。Java中的`Callable`接口可以创建返回值的任务,并通过`Future`接口获取结果。结合`ExecutorService`,我们可以将接收数据的任务作为一个`Callable`...

    linux下C语言SOCKET编程客户端、服务器端代码

    此外,对于多路复用IO模型,如I/O复用(select/poll/epoll)、信号驱动I/O(SIGIO)和异步非阻塞I/O,C语言SOCKET编程可以利用这些技术提高服务器处理并发连接的能力。 总的来说,Linux下的C语言SOCKET编程涉及了...

Global site tag (gtag.js) - Google Analytics