摘要: 建立TCP连接 新的Socket实例创建后,就立即能用于发送和接收数据。也就是说,当Socket实例返回时,它已经连接到了一个远程终端,并通过协议的底层实现完成了TCP消息或握手信息的交换。 客户端连接的建立 Socket构造函数的调用与客户端连接建立时所关联的协议事件之间的关系下图所示: 当客户端 阅读全文
posted @ 2017-12-13 21:12 yixiu868 阅读(308) 评论(0) 推荐(1) 编辑
摘要: 基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提到了SendQ和RecvQ缓冲队列,这两个缓冲区的容量在具体实现时会受一定的限制,虽然它们使用的实际 阅读全文
posted @ 2017-12-13 21:10 yixiu868 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 底层数据结构 如果不理解套接字的具体实现所关联的数据结构和底层协议的工作细节,就很难抓住网络编程的精妙之处,对于TCP套接字来说,更是如此。套接字所关联的底层的数据结构集包含了特定Socket实例所关联的信息。比附,套接字结构除其他信息外还包含: 1、该套接字所关联的本地和远程互联网地址和端口号。 阅读全文
posted @ 2017-12-13 21:08 yixiu868 阅读(1520) 评论(0) 推荐(0) 编辑
摘要: NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接、读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候,程序也可以做其他事情,以实现线程的异步操作。 考虑一个即时消息服务器,可能有上千个客户端同时连接到服 阅读全文
posted @ 2017-12-13 21:06 yixiu868 阅读(2713) 评论(1) 推荐(1) 编辑
摘要: 简介 Java NIO从JDK1.4引入,它提供了与标准IO完全不同的工作方式。 NIO包(java.nio.*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O类中的一些问题。 1、 Buffer:它是包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。 2、 阅读全文
posted @ 2017-12-13 20:50 yixiu868 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 书上示例 在第一章《基本套接字》中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去。 书上客户端代码如下: 书上的服务器端代码如下: 示例程序当然运行无误,运行结果如下: 问题的引出 首先明确几点: 1、客户端与服务器端在接收和发送 阅读全文
posted @ 2017-12-13 20:49 yixiu868 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 了解线程池 在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客户端对应一个线程。但是,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建 阅读全文
posted @ 2017-12-13 20:44 yixiu868 阅读(2897) 评论(0) 推荐(0) 编辑
摘要: 在传输消息时,用Java内置的方法和工具确实很用,如:对象序列化,RMI远程调用等。但有时候,针对要传输的特定类型的数据,实现自己的方法可能更简单、容易或有效。下面给出一个实现了自定义构建和解析协议消息的Demo(书上例子)。 该例子是一个简单的投票协议。这里,一个客户端向服务器发送一个请求消息,消 阅读全文
posted @ 2017-12-13 20:39 yixiu868 阅读(1745) 评论(0) 推荐(0) 编辑
摘要: 程序间达成的某种包含了信息交换的形式和意义的共识称为协议,用来实现特定应用程序的协议叫做应用程序协议。大部分应用程序协议是根据由字段序列组成的离散信息定义的,其中每个字段中都包含了一段以位序列编码(即二进制字节编码,也可以使用基于文本编码的方式,但常用协议如:TCP、UDP、HTTP等在传输数据时, 阅读全文
posted @ 2017-12-13 20:35 yixiu868 阅读(406) 评论(0) 推荐(0) 编辑
摘要: UDP的Java支持 UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接。实际上,UDP协议只实现了两个功能: 1)在IP协议的基础上添加了端口; 2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。 Java通过Da 阅读全文
posted @ 2017-12-13 20:31 yixiu868 阅读(353) 评论(0) 推荐(0) 编辑
摘要: TCP的Java支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协 阅读全文
posted @ 2017-12-13 20:26 yixiu868 阅读(262) 评论(0) 推荐(0) 编辑