- 博客(48)
- 资源 (15)
- 问答 (1)
- 收藏
- 关注
翻译 Wikipedia’s 10 most-visited pages in 2012
Wikipedia dominates Google search results. That’s something any amateur googler knows after a few searches for anything mildly popular—from, say, the word “Google” itself to Facebook toFifty Shades
2012-12-30 10:17:42 1601
原创 Java_TCPIP_Socket编程(doc)下载
Java_TCPIP_Socket编程(doc)第 1 章 简介 31.1 计算机网络,分组报文和协议31.2 关于地址61.3 关于名字81.4 客户端和服务器81.5 什么是套接字.91.6 练习10第 2 章 基本套接字 102.1 套接字地址102.2 TCP套接字.172.2.1 TCP客户端.172.2.2 TCP服务器端..222.
2012-12-30 09:38:42 1341
原创 NIO:数据报(UDP)信道
数据报(UDP)信道 Java的NIO包通过DatagramChannel类实现了数据报(UDP)信道。与我们之前看到的其他形式的SelectableChannel一样,DatagramChannel在DatagramSocket上添加了选择和非阻塞行为,以及基于缓冲区的I/O操作能力。 DatagramChannel: 创建,连接和关闭 static DatagramChan
2012-12-30 09:08:22 1526
原创 NIO:Selector 详解
示例程序TCPEchoServerSelector中展示了Selector的基本用法。在此,我们将对其进行更加详细的介绍。Selector: 创建和关闭static Selector open()boolean isOpen()void close()调用Selector的open()工厂方法可以创建一个选择器实例。选择器的状态是"打开"或"关闭"的。创建时选择器的状态是打开的
2012-12-30 09:06:20 1768
转载 《那些年啊,那些事——一个程序员的奋斗史》十四(完结)
125 距离离职交接的一个月时间还剩几天,本来应该是平淡无事的,却没想到最后还是波澜四起。昨天下班前,公司突然停了电。这本是件普通得不能再普通的事情,可没想到过了一会来电了,或许是波峰电压太大,或许是稳压电源做工太糟糕,公司所配的笔记本一闪之后居然再也起不来了!段伏枥想尽办法折腾了一番,最后还是无果:笔记本烧掉了! 烧掉了,还能有啥办法,拿去修呗。不过这笔记本有点特殊,是武总向严董
2012-12-29 09:25:00 2310
原创 NIO:流(TCP)信道详解
流信道有两个变体:SocketChannel和ServerSocketChannel。像其对应的Socket一样,SocketChannel是相互连接的终端进行通信的信道。SocketChannel:创建,连接和关闭static SocketChannel open(SocketAddress remote)static SocketChannel open()boolean co
2012-12-29 09:09:29 1506
原创 NIO:Buffer 详解
如你所见,在NIO中,数据的读写操作始终是与缓冲区相关联的。Channel将数据读入缓冲区,然后我们又从缓冲区访问数据。写数据时,首先将要发送的数据按顺序填入缓冲区。基本上,缓冲区只是一个列表,它的所有元素都是基本数据类型(通常为字节型)。缓冲区是定长的,它不像一些类那样可以扩展容量(例如,List,StringBuffer等)。注意,ByteBuffer是最常用的缓冲区,因为:1)它提供了读写其
2012-12-29 09:06:58 1915
原创 NIO:Selector 类用法
如本章第1节中提到的,Selector类可用于避免使用非阻塞式客户端中很浪费资源的"忙等"方法。例如,考虑一个即时消息服务器。可能有上千个客户端同时连接到了服务器,但在任何时刻都只有非常少量的(甚至可能没有)消息需要读取和分发。这就需要一种方法阻塞等待,直到至少有一个信道可以进行I/O操作,并指出是哪个信道。NIO的选择器就实现了这样的功能。一个Selector实例可以同时检查(如果需要,也可以等
2012-12-29 08:55:37 1818
原创 NIO:与 Buffer 一起使用 Channel
如前文所述,Channel实例代表了一个与设备的连接,通过它可以进行输入输出操作。实际上Channel的基本思想与我们见过的普通套接字非常相似。对于TCP协议,可以使用ServerSocketChannel和SocketChannel。还有一些针对其他设备的其他类型信道(如,FileChannel),尽管我们在后文中不会再提及,这里介绍的大部分内容对于它们同样适用。信道(channel)和套接字(
2012-12-29 08:52:13 1121
原创 NIO:为什么需要 NIO?
基本的Java套接字对于小规模系统可以很好地运行,但当涉及到要同时处理上千个客户端的服务器时,可能就会产生一些问题。其实在第4章已经可以看到一些迹象:由于创建、维护和切换线程需要的系统开销,一客户一线程方式在系统扩展性方面受到了限制。使用线程池可以节省那种系统开销,同时允许实现者利用并行硬件的优势。但对于连接生存期比较长的协议来说,线程池的大小仍然限制了系统可以同时处理的客户端数量。考虑一个在客户
2012-12-29 08:49:47 1189
原创 站长手记(2012.12.14号-2012.12.23号)
2012.12.14号 - 2012.12.23号站长手记------------------------------------------------------------------------ 因朋友提醒及个人爱好,再次燃起了站长之心。通过软件遍历了所有的soft相关的域名,最后注册了域名lsoft.cn,另外购买了php虚拟主机。2012.12.14号-
2012-12-25 15:32:55 1083 1
翻译 Developer Road: The List
This is a list of things I’m doing to become a developer. I hope it can be of use to someone, if not just a constant reminder to myself.1. Start a blogI wish I had done this sooner. If you’re in m
2012-12-25 14:50:34 1229
原创 多任务处理:关闭连接
关闭连接 可能你从没有想过由谁来关闭一个连接。在电话交谈中,任何一方都可以发起结束交谈的过程。这通常是这样的: "好了,我得走了。" "好的,再见。" "再见。" 另一方面,网络协议通常明确指定了由谁来发起"关闭"连接。在回显协议中,见图4.1(a),服务器原原本本地将客户端发送的一切数据回显回去。当客户端完成数据发送后,则调用close()方法。在服务器接收并回
2012-12-25 14:39:21 1046
原创 多任务处理:控制默认行为
控制默认行为 TCP/IP协议的开发者用了大量的时间来考虑协议的默认行为,以满足大部分应用程序的需要。(如果你对此表示怀疑,可以参考RFC1122和1123,它们根据多年的经验对TCP/IP协议的实现的推荐行为进行了详尽的描述。)对于大多数应用程序来说,这些设计都非常适合,然而,"满足所有需求的一种尺寸"能够真正适用于所有场合的情况非常少。前面我们已经看到UDP回显客户端的例子。默认情况下,D
2012-12-25 14:33:30 1126
原创 多任务处理:多接收者(广播和多播)
多接收者 到目前为止,我们的套接字都处理的是两个实体之间的通信,通常是一个服务器和一个客户端。这种一对一的通信方法有时称为单播(unicast)。而对于某些信息,多个接收者都可能对其感兴趣。对于这种情况,我们可以向每个接收者单播一个数据副本,但是这样做效率可能非常低。由于将同样的数据发送了多次,在一个网络连接上单播同一数据的多个副本非常浪费带宽。实际上,如果我们想要以固定频率发送数据,网络连接
2012-12-25 14:29:48 1353
原创 Apache软件基金会项目介绍
HTTP Server: 可以在UNIX,MS-Windows,Macintosh和Netware操作系统下运行的HTTP服务器的项目Ant: 基于Java语言的构建工具,类似于C语言的Make工具。AXIS2:Web服务(SOAP, WSDL)的处理器,基于AXIS1.X重新构建。APR:(也就是:Apache Portable Runtime)C语言实现的便携运行库的管理工具。Beehive:
2012-12-24 11:05:07 1842
原创 多任务处理:阻塞和超时
阻塞和超时 Socket的I/O调用可能会因为多种原因而阻塞。数据输入方法read()和receive()在没有数据可读时会阻塞。TCP套接字的write()方法在没有足够的空间缓存传输的数据时可能阻塞。 ServerSocket 的accept()方法和Socket的构造函数都会阻塞等待,直到连接建立。同时,长的信息往返时间,高错误率的连接和慢速的(或已发生故障的)服务器,都可能导致需要
2012-12-23 09:49:16 1332
原创 多任务处理:管理调度Executor 接口
系统管理调度:Executor接口 在上一节中我们已经看到,将客户服务器协议的细节封装起来(如EchoProtocol.java),就可以通过同一个协议实现来使用不同的"调度"方法(如,TCPEchoServerThread.java和TCPEchoServerThreadPool.java)。实际上,对于调度方法本身来说也是这样。Executor接口(java.util.concurrent
2012-12-23 09:47:03 1008
原创 多任务处理:线程池
线程池 每个新线程都会消耗系统资源:创建一个线程将占用CPU周期,而且每个线程都自己的数据结构(如,栈)也要消耗系统内存。另外,当一个线程阻塞(block)时,JVM将保存其状态,选择另外一个线程运行,并在上下文转换(context switch)时恢复阻塞线程的状态。随着线程数的增加,线程将消耗越来越多的系统资源。这将最终导致系统花费更多的时间来处理上下文转换和线程管理,更少的时间来对连
2012-12-23 09:44:36 1142
原创 多任务处理:一客户一线程
一客户一线程 在一客户一线程(thread-per-client)的服务器中,为每个连接都创建了一个新的线程来处理。服务器循环执行一些任务,在指定端口上侦听连接,反复接收客户端传入的连接请求,并为每个连接创建一个新的线程来对其进行处理。 TCPEchoServerThread.java实现了这种一客户一线程的服务器结构。它与迭代服务器非常相似,也是用一个循环来接收和处理客户端的请求。主要不
2012-12-23 09:42:58 1566
原创 多任务处理:服务器协议
服务器协议 既然我们将要介绍的多任务服务器方法与特定的客户端-服务器协议相互独立,我们希望能够实现一个同时满足两者的协议。EchoProtocol中给出了回显协议的代码。这个类的静态方法handleEchoClient()中封装了对每个客户端的处理过程。除添加了写日志功能(马上会对其介绍)外,这段代码与TCPEchoServer.java中的连接处理部分几乎完全一致。该方法的参数是客户端Soc
2012-12-23 09:41:46 1180
原创 多任务处理:多线程
我们在前面所介绍的基本TCP响应服务器一次只能处理一个客户端的请求。当一个客户端向一个已经被其他客户端占用的服务器发送连接请求时,虽然其在连接建立后即可向服务器端发送数据,服务器端在处理完已有客户端的请求前,却不会对新的客户端作出响应,。这种类型的服务器称为"迭代服务器(iterative server)"。迭代服务器按顺序处理客户端的请求,也就是说在完成了对前一客户端的服务后,才会对下一个客
2012-12-23 09:39:03 1363
原创 搜索引擎三国鼎立:百度 vs 360 vs 搜狗
理论上说,搜索市场不存在平分秋色的可能,不管份额如何接近,最终必然是东风压倒西风,这一点在全球市场都未见过反例。雅虎在日本和台湾独占鳌头,Naver在韩国有压倒性优势,Yandex称霸俄罗斯。谷歌在全球大部分市场占垄断地位,在至少30个国家和地区占有90%以上的份额。当然,在中国大陆把持搜索市场多年的百度也不例外。 事实似乎在不断地暗示,搜索市场要么赢者通吃,要么看别人吃,美国搜索市场的
2012-12-21 21:15:29 2583 1
原创 投票协议:发送和接收
通过流发送消息非常简单,只需要创建消息,调用toWire()方法,添加适当的成帧信息,再写入流。当然,接收消息就要按照相反的顺序执行。这个过程适用于TCP协议,而对于UDP协议,不需要显式地成帧,因为UDP协议中保留了消息的边界信息。为了对发送与接收过程进行展示,我们考虑投票服务的如下几点:1)维护一个候选人ID与其获得选票数的映射,2)记录提交的投票,3)根据其获得的选票数,对查询指定的候选人和
2012-12-20 14:17:56 1102
原创 投票协议:二进制表示方法
二进制表示方法 下面我们将展示另一种对投票协议消息进行编码的方法。与基于文本的格式相反,二进制格式使用固定大小的消息。每条消息由一个特殊字节开始,该字节的最高六位为一个"魔术"值010101。这一点少量的冗余信息为接收者收到适当的投票消息提供了一定程度的保证。该字节的最低两位对两个布尔值进行了编码。消息的第二个字节总是0,第三、第四个字节包含了candidateID值。只有响应消息的最后8
2012-12-20 14:14:18 1090
原创 投票协议:基于文本的表示方法
首先,我们介绍一个用文本方式对消息进行编码的版本。该协议指定使用US-ASCII字符集对文本进行编码。消息的开头是一个所谓的"魔术字符串",即一个字符序列,用于接收者快速将投票协议的消息和网络中随机到来的垃圾消息区分开。投票/查询布尔值被编码成字符形式,'v'表示投票消息,'i'表示查询消息。消息的状态,即是否为服务器的响应,由字符'R'指示。状态标记后面是候选人ID,其后跟的是选票总数,它们都编
2012-12-20 14:13:14 908
原创 投票协议:构建和解析协议消息
我们再看一个简单的例子,对在实现别人定义的协议时可能用到的技术进行了介绍。这个例子程序是一个简单的"投票"协议,如图3.2所示。这里,一个客户端向服务器发送了一个请求消息,消息中包含了一个候选人ID,范围是0至1000。Vote Reques:投票请求, Candidate:候选人,Vote Count:选票总数 程序支持两种请求。一种是查询(inquiry),即向服务器询问给
2012-12-20 14:11:46 1059
原创 通信:成帧与解析
成帧与解析当然,将数据转换成在线路上传输的格式只完成了一半工作,在接收端还必须将接收到的字节序列还原成原始信息。应用程序协议通常处理的是由一组字段组成的离散的信息。成帧(Framing)技术则解决了接收端如何定位消息的首尾位置的问题。无论信息是编码成了文本、多字节二进制数、或是两者的结合,应用程序协议必须指定消息的接收者如何确定何时消息已完整接收。 如果一条完整的消息负载在一个Da
2012-12-19 11:03:11 1825
原创 通信:组合输入输出流
组合输入输出流 Java中与流相关的类可以组合起来从而提供强大的功能。例如,我们可以将一个Socket实例的OutputStream包装在一个BufferedOutputStream实例中,这样可以先将字节暂时缓存在一起,然后再一次全部发送到底层的通信信道中,以提高程序的性能。我们还能再将这个BufferedOutputStream实例包裹在一个DataOutputStream实例中,以实
2012-12-19 10:59:50 844
原创 信息编码:位操作布尔值编码
位操作:布尔值编码 位图(Bitmaps)是对布尔信息进行编码的一种非常紧凑的方式,通常用在协议中。位图的主要思想是整型数据中的每一位都能够对一个布尔值编码--通常是0表示false,1表示true。要操纵位图,你需要了解如何使用Java中的"位操作"方法来设置和清除单独的一位。掩码(mask)是一个的整数值,其中有一位或多位被设为1,其他各位被清空(即,设为0)。在这里我们处理的是int
2012-12-19 10:53:53 1038
原创 信息编码:字符串和文本
字符串和文本 历史悠久的文本(可打印,即可显示的字符串)可能是用来表示信息最常用的方式。文本使用起来非常方便,因为人们习惯于处理各种各样以字符串形式表示的信息,如书本中,报纸中,以及电脑显示器上的信息。因此,只要我们指定如何对要传输的文本进行编码,我们就几乎能发送其他任何类型的数据:先将其表示成文本形式,再对文本进行编码。显然,我们可以将数字和boolean类型的数据表示成String类型
2012-12-19 10:52:07 1056
原创 信息编码:基本整型
信息编码 首先,我们来考虑一下简单数据类型,如int,long,char,String等,是如何通过套接字发送和接收的。从前面章节我们已经知道,传输信息时可以通过套接字将字节信息写入一个OutputStream实例中(该实例已经与一个Socket相关联),或将其封装进一个DatagramPacket实例中(该实例将由DatagramSocket发送)。然而,这些操作所能处理的唯一数据类型是
2012-12-19 10:41:35 1136
原创 基本套接字:UDP 客户端/服务器端
UDP客户端 UDP客户端首先向被动等待联系的服务器端发送一个数据报文。一个典型的UDP客户端主要执行以下三步: 1. 创建一个DatagramSocket实例,可以选择对本地地址和端口号进行设置。2. 使用DatagramSocket类的send() 和 receive()方法来发送和接收DatagramPacket实例,进行通信。 3. 通信完成后
2012-12-18 17:55:47 1843
原创 基本套接字:UDP 套接字
UDP套接字 UDP协议提供了一种不同于TCP协议的端到端服务。实际上UDP协议只实现两个功能:1)在IP协议的基础上添加了另一层地址(端口),2)对数据传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。由于其简单性,UDP套接字具有一些与我们之前所看到的TCP套接字不同的特征。例如,UDP套接字在使用前不需要进行连接。TCP协议与电话通信相似,而UDP协议则与邮件通信相似:你
2012-12-18 17:49:25 1464
原创 基本套接字:输入输出流
Java中TCP套接字的基本输入输出形式是流(stream)抽象。(Java1.4加入的NIO(New I/O)工具提供了另一种替代的抽象形式,我们将在第5章介绍。)流只是一个简单有序的字节序列。Java的输入流(input streams)支持读取字节,而输出流(outputstreams)则支持写出字节。在我们的TCP服务器和客户端中,每个Socket实例都维护了一个InputStre
2012-12-18 17:45:39 1150
原创 基本套接字:TCP 套接字
TCP套接字 Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一端。一个TCP连接(TCP connection)是一条抽象的双向信道,两端分别由IP地址和端口号确定。在开始通信之前,要建立一个TCP连接,这需要先由客户端TCP向服务器端TCP发送连接请求。ServerSocket实例则监听TCP连接请求,并为每个请求创建
2012-12-18 17:42:23 1697
原创 基本套接字:套接字地址
一个客户端要发起一次通信,首先必须知道运行服务器端程序的主机的IP地址。然后由网络的基础结构利用目标地址(destination address),将客户端发送的信息传递到正确的主机上。在Java中,地址可以由一个字符串来定义,这个字符串可以是数字型的地址(不同版本的IP地址有不同的型式,如192.0.2.27是一个IPv4地址,fe20:12a0::0abc:1234是一个IPv6地址),也
2012-12-18 17:34:04 1340
原创 WordPress建站
一、WordPress介绍 WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行“前100万”的网站中有超过16.7%的网站使用WordPress。到了2011年8月,约22%的新网站采用了WordPress。WordPress是目前因特网上最流行的博客系统。 2003年5月27日,Wor
2012-12-15 20:27:06 2300
原创 数据结构:双向链表list的表头/尾添加数据、链表显示、链表清空
#include//定义节点(数据对象)的接口class Node{ //声明list类为本类的友元类 friend class list;//私有成员 private: int Data; //节点数据 Node *previous; //前趋指针 Node *next; //后
2012-12-10 10:40:16 1432
原创 数据结构:stack栈的初始化、入栈、出栈及显示栈元素
#includeconst int MAX=5; //假定栈中最多保存5个数据//定义名为stack的类,其具有栈功能class stack { //数据成员 float num[MAX]; //存放栈数据的数组 int top; //指示栈顶位置的变量public: //成员函数 void i
2012-12-10 10:37:31 3317
xdoclet-1.2.3.jar和xjavadoc-1.1.jar官方下载
2014-04-24
Java_TCPIP_Socket编程(doc)
2012-12-29
Java开发技术大全(500个源代码).
2012-12-02
Java socket多线程聊天系统(myeclipse)
2012-10-18
MVC在线RSS阅读器(ASP.NET 4.0)
2012-10-07
MVC网上书店(ASP.NET 4.0)
2012-10-07
ASP.NET 4.0网站开发与项目实战PPT
2012-10-07
请问后面更新的三节课2021版的跟前面有啥区别吗?
2022-02-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人