随笔- 57
文章- 0
评论- 37
阅读-
48万
06 2012 档案
stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序
摘要:RMI的本质就是实现在不同JVM之间的调用,它的实现方法就是在两个JVM中各开一个Stub和Skeleton,二者通过socket通信来实现参数和返回值的传递。 有关RMI的例子代码网上可以找到不少,但绝大部分都是通过extend the interface java.rmi.Remote实现,已经封装的很完善了,不免使人有雾里看花的感觉。下面的例子是我在《Enterprise JavaBeans》里看到的,虽然很粗糙,但很直观,利于很快了解它的工作原理。Ⅰ:RMI工作原理(自定义实现一个Stub 和 Skeleton)1. 定义一个Person的接口,其中有两个business method
阅读全文
23种架构模式
摘要:1、FACTORY?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。2、BUILDER?MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用
阅读全文
专业术语的一些解释
摘要:1、Openness(开放性) 计算机系统的开放性是指该系统是否能够扩展或以多种形式重新实现(be extended and re-implemented in various ways)。 分布式系统的开发性,主要看其对添加新的“资源分享服务”(resource sharing services)的支持程度,以及能让多少客户端程序访问的支持程度。 系统的扩展性,表现在硬件上应是可扩展的(可增加计算机到网络中),亦表现在软件上(加入新的服务,或者可重新实现老的软件) 要使系统具有开放性,必须制定好系统组件接口的规格说明以及文档(sepcification and documenta...
阅读全文
socket 编程入门教程(三)TCP原理:7、TCP连接的关闭
摘要:TCP连接一旦建立,服务器端和客户端就成为了对等关系,任何一方都可以发出关闭握手请求,甚至可以同时发出关闭握手请求。TCP的连接建立需要3次握手,而正常关闭则需要4次握手。1、主动关闭的一方A调用close(),SendQ不再接收send()写入信息,在SendQ队列的最后,向被动关闭的一方发送TCP的IP数据报作为关闭握手的请求。这个数据报中包含着标志FIN,也包含着此刻的字节序号m。2、B接收到第一次关闭握手请求后马上返回一个数据报作为回应。因为B接收到了FIN作为关闭连接的一个字节的数据,所以返回的字节序号是m+1。当A接收到B的这个回应,也即是第二次握手以后,表明确认在A到B的方向上不
阅读全文
socket 编程入门教程(三)TCP原理:6、字节流的发送与接收
摘要:从TCP三次握手的原理我们可以看到,TCP有“保障”的连接实际上可以看做是两个单向的连接:一个通道只负责发送,另外一个只负责接收。并且,传送的信息是以字节为单位保证顺序的。在socket机制中,应用层的程序以send()函数将数据首先发送到本机系统的发送缓存中,我们称之为SendQ,意指这是一个FIFO(先进先出)的队列。这个缓存是系统决定的,并不是在我们的程序中指定的。然后socket机制负责将SendQ中的数据以字节为单位,按照顺序发送给对方的接收缓存RecvQ中。RecvQ也是一个属于系统的FIFO缓存队列。从程序员的角度看,send()函数只负责把数据送入SendQ,而SendQ何时将
阅读全文
socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)
摘要:前面3个小节介绍了socket机制对TCP协议三次握手的实现,需要强调的是,与协议独立于实现类似,TCP的三次握手是独立于socket体系的理论。在TCP协议中,三次握手是通过3个TCP格式的IP数据报来实现的。TCP格式的IP数据报中包含着TCP首部,TCP首部信息中包含着对每一个数据报具体内容的描述。我们这里需要介绍的首部位(bit)标志只有3个:SYN:同步序号用来发起一个连接。因为TCP协议要求数据传送是可靠的,他的实现方式就是对传输的数据的每一个字节(byte)按顺序编号。但是初始序列号(ISN:Initial Sequence Number)并非从0开始,而是一个随时间周而复始变化
阅读全文
socket 编程入门教程(三)TCP原理:4、设计TCP socket的类(下)
摘要:在另外一边的客户端,我们分析一下TCPClientSock的建立过程。classTCPClientSock:publicBaseSock{private:sockaddr_inserverSockAddr;protected:char*preBuffer;intpreBufferSize;mutableintpreReceivedLength;public:TCPClientSock(constchar*server_IP,unsignedshortserver_port,intpre_buffer_size=32);virtual~TCPClientSock();intTCPReceive(
阅读全文
socket 编程入门教程(三)TCP原理:1、socket异常信息
摘要:之所以把对异常信息的介绍放到原理之前讲,是因为由于socket本身的复杂性,导致了产生各种异常的复杂性。我们应该时刻铭记的是,sokcet本身属于系统(OS),是系统对TCP/IP的实现,也就是说,socket发出的异常信息不代表程序出错,甚至不代表系统出错,而仅仅就是代表socket本身的各种异常情况。另外一点我觉得应该强调的是:socket不是TCP/IP;TCP/IP也不是socket。socket是为广泛的协议设计的,涉及TCP/IP的内容只是socket体系中一个很小的子集;而TCP/IP就更加独立于sokcet而存在——TCP/IP是协议描述;socket是对协议理论的一种实现形式
阅读全文
socket 编程入门教程(三)TCP原理:2、设计TCP socket的类(上)
摘要:我们在第1节中讲过,socket是一个int的文件描述符(WinSock中直接是一种抽象的描述符),我们通过对这个描述符发出指令操作socket。这是C语言的思想,在面向对象的思想中,最好socket本身是一种对象,各种方法由对象本身发出。用面向对象的思想封装socket并不困难,而且,对于描述socket的概念可能更加直观,这一节,我们边介绍socket和TCP的概念边对socket进行OO封装。首先,每一个socket对象都具有唯一的socket文件描述符,这样可以很好的对应socket的概念。所以我们构建一个基类,并让其成为纯虚函数——这是因为socket文件描述符必须在具体的构造中才能
阅读全文
socket 编程入门教程(一)TCP server 端:8、本章的完整源代码
摘要://Filename:TcpServerClass.hpp#ifndefTCPSERVERCLASS_HPP_INCLUDED#defineTCPSERVERCLASS_HPP_INCLUDED#include<unistd.h>#include<iostream>#include<sys/socket.h>#include<arpa/inet.h>classTcpServer{private:intlistenSock;intcommunicationSock;sockaddr_inservAddr;sockaddr_inclntAddr;pu
阅读全文
socket 编程入门教程(一)TCP server 端:7、接收与发送
摘要:现在,我们通过accept()创建了新的socket,也就是我们类中的数据成员communicationSock,现在,我们就可以通过这个socket进行通讯了。TCP通讯模型 在介绍函数之前,我们应该了解一些事实。TCP的Server/Client模型类似这样:ServApp——ServSock——Internet——ClntSock——ClntApp当然,我们这里的socket指的就是用于“通讯”的socket。TCP的server端至少有两个socket,一个用于监听,一个用于通讯;TCP的client端可以只有一个socket,这个socket同时“插”在server的两个socket
阅读全文
socket 编程入门教程(一)TCP server 端:6、创建“通讯 ”嵌套字
摘要:作者:龙飞 这里的“通讯”加上了引号,是因为实际上所有的socket都有通讯的功能,只是在我们的例子中,之前那个socket只负责listen,而这个socket负责接受信息并echo回去。我们现看看这个函数:boolTcpServer::isAccept(){unsignedintclntAddrLen=sizeof(clntAddr);if((communicationSock=accept(listenSock,(sockaddr*)&clntAddr,&clntAddrLen))<0){returnfalse;}else{std::cout<<&quo
阅读全文
socket 编程入门教程(一)TCP server 端:5、创建监听嵌套字
摘要:作者:龙飞 前面一小节,我们已经写出了TcpServer的构造函数。这个函数的实际作用,就是创建了listen socket(监听嵌套字)。这一节,我们来具体分析这个创建的过程。socket和sockaddr的创建是可以相互独立的 在函数中,我们首先通过socket()系统调用创建了listenSock,然后通过为结构体赋值的方法具体定义了服务器端的sockaddr。(memset()函数的作用是把某个内存段的空间设定为某值,这里是清零。)其他的概念已经在前一小节讲完了。这里需要补充的是说明宏定义INADDR_ANY。这里的意思是使用本机所有可用的IP地址。当然,如果你机器绑定了多个IP地址,
阅读全文
socket 编程入门教程(一)TCP server 端:4、构造函数涉及的概念
摘要:作者:龙飞 话题回到“黑社会办公室”的例子,讲概念已经扯得比较远了,不过,这一节我们还得讲概念,不过好在有些程序的例子。如果大家不想翻回去看TcpServer类的原型,我这里直接给出这个头文件的完整源代码://Filename:TcpServerClass.hpp#ifndefTCPSERVERCLASS_HPP_INCLUDED#defineTCPSERVERCLASS_HPP_INCLUDED#include<unistd.h>#include<iostream>#include<sys/socket.h>#include<arpa/inet.h&
阅读全文
socket 编程入门教程(一)TCP server 端:2、socket与文件描述符
摘要:UNIX中的一切事物都是文件(everythingin Unix is a file!) 当我在这篇教程中提到UNIX的时候,其意思专指符合UNIX标准的所谓“正统”UNIX的衍生系统(其实我就用来带指那些买了最初UNIX源代码的商业系统)操作系统和类似Linux,BSD这些类UNIX系统。如果某些要点是Linux特有的,或者因为本人孤陋寡闻暂时搞不清楚是Linux特有的还是UNIX通用的,我就会指明是Linux,甚至其发行版(我本人在写这篇教程的时候是以Debian GNU/Linux 4.0 etch为测试平台的)。 我们学习UNIX的时候,恐怕听到的第一句话就是这句:UNIX中一切都是文
阅读全文
socket 编程入门教程(一)TCP server 端:1、建模
摘要:绝大部分关于socket编程的教程总是从socket的概念开始讲起的。 要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中的一小部分: 运输层(Host-to-Host Transport Layer)的TCP和UDP协议, 以及使用这两个协议进行应用层(Application Layer)的开发。 即使是socket的核心部分,网络层(Internet Layer)的IP协议,在编程的时候我们也很少会感觉到它的存在——因为已经被封装好了,我们唯一需要做的事情就是传入一个宏。第一节我想介绍的概念就这么多, 当然...
阅读全文
socket 编程入门教程(一)TCP server 端:3、sockaddr与sockaddr_in
摘要:转自:http://www.cppblog.com/lf426/archive/2008/07/10/55800.html收件人地址 一家化妆品公司将一批新产品的样品,准备发给某学校某个班的女生们免费试用。通常情况下,这件邮包的地址上可以这么写:收件人:全体女生。地址:A省B市C学校,X级Y班。但是,如果在描述地址的时候这样写呢:收件人:全体女生。地址:请打电话xxxxxxxx,找他们学校一个叫Lucy的女生,然后把东西送到她的班上。这种文字是相当的诡异啊-_-!!!,但是并不等于就没有表述清楚邮包的去向和地址。事实上邮局看到这样的地址一定会发飙的,然而对于电脑,如果你的地址描述形式是他可以接
阅读全文