`
whao189
  • 浏览: 123479 次
  • 性别: 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 则可以继续执行其他操作,不会被阻塞。 ...

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

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

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

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

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

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

    Linux下Socket连接超时的一种实现方法

    这是因为在连接时,我们不知道服务器是否在线,如果不设置非阻塞状态,可能会导致程序阻塞。 其次,在调用 connect 函数连接对端主机时,如果失败,需要判断当前的 errno 是否为 EINPROGRESS,也就是说是不是连接...

    lab8-SOCKET编程原理.ppt

    4. 通信方式:包括阻塞和非阻塞两种方式。 5. SOCKET 的位置:在应用层程序中,SOCKET 位于 IP 数据链路层和物理层之间,负责将应用层数据转换为网络数据。 6. 不同操作系统中的 SOCKET:包括 Windows Socket...

    完成端口(IOCP) 服务器源码

    1. 创建服务器socket, 并将socket设置为非阻塞模式 2. bind()绑定IP地此与端口 3. listen() 4. 创建IO完成端口,将socket绑定到IO完成端口上 5. 根据当前机器CPU个数创建工作者线程池 6. 使用AcceptEx()提前创建...

    Linux网络编程-网络基础-socket编程-高并发服务器.pdf

    - 非阻塞I/O:将socket设置为非阻塞模式,避免在等待数据时阻塞其他操作。 - 异步I/O:如AIO,操作系统在数据准备好后通知应用程序,进一步提升并发处理能力。 C/S模式和B/S模式是常见的网络应用程序设计模式: - ...

    tcp服务器客户端demo

    在程序启动时候创建一个工作模式的代理来区分是否启动服务器以及是阻塞方式还是非阻塞方式 在WorkModeProxy中根据配置决定使用Socket的类型,以及工作模式的类型 支持使用不同的socket,可以通过SocketFactory进行...

    DTU如何通过socket实现网络通信.pdf

    相反,非阻塞Socket在调用时不等待,无论结果如何都会立即返回。 【TCP通信流程】 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,其通信过程包括以下几个步骤: 1. **服务器端**: ...

    python实现单线程多任务非阻塞TCP服务端

    创建服务器socket sock = socket(AF_INET, SOCK_STREAM) # 2.绑定主机和端口 addr = ('', 7788) # sock.bind(addr) # 3. 设置最大监听数目,并发 sock.listen(10) # 4. 设置成非阻塞 sock.setblocking(False) # 保存...

    (牛客网C++课程)Linux 高并发Web服务器项目实战(带定时检测代码)

    1. 线程池 + 非阻塞 socket + epoll + 事件处理的并发模型 2. 状态机解析HTTP请求 3. 心跳机制 4. 简易日志系统 主要内容: 1. 使用 socket 实现服务器和浏览器客户端的通信; 2. 用 epoll 事件检测技术实现 IO 多...

    Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】

    本文实例讲述了Python实现的服务器。分享给大家供大家参考,具体如下: python – 单进程服务器 #coding=utf-8 from socket import * #创建套接字 serSocket = socket(AF_INET, SOCK_STREAM) #重复使用绑定信息 ...

    MFC网络编程之自制浏览器

    网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列...因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非阻塞Socket编程机制的理解。

    c++SOCKET详解

    下面是对 C++ SOCKET 通讯的详细解释,包括五种常用的 I/O 模型、阻塞和非阻塞模式、套接字的使用等。 一、阻塞模式和非阻塞模式 在 Windows 平台下,套接字默认为阻塞模式。在阻塞模式下,执行 I/O 操作时,程序...

    DTU如何通过socket实现网络通信.docx

    创建服务器套接字(socket)。 2. 绑定套接字到特定IP和端口(bind)。 3. 监听连接请求(listen)。 4. 接受连接请求(accept)。 5. 数据传输(send/receive)。 6. 关闭套接字(closesocket)。 - **...

    c语言下进行socket通信.pdf

    在实际开发中,还需要考虑错误处理、多线程/进程支持、非阻塞I/O以及连接复用等高级特性。同时,为了保证网络通信的可靠性,可以使用TCP协议,而如果对实时性要求较高,可能会选择UDP协议。理解并熟练掌握这些基本...

    tcp服务器epoll的多种实现1

    Non-blocking I/O 是一种非阻塞的 I/O 模型,在这个模型中,进程不会阻塞,而是立即返回一个错误代码,表明 I/O 操作尚未完成。 Non-blocking I/O 的缺点是需要额外的逻辑来处理 I/O 事件。 I/O 多路复用是指使用一...

    高性能IO模型浅析

    (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的Reactor...

    服务器概要设计说明.docx

    Windows下有五种非阻塞I/O模型:选择〔Select〕、异步选择〔WSAAsyncSelect〕、事件选择〔WSAEventSelect〕、重叠I/O〔Overlapped I/O〕和完成端服务器概要设计说明全文共5页,当前为第2页。服务器概要设计说明全文...

Global site tag (gtag.js) - Google Analytics