赛迪网 > IT技术 Java > JJ2EE介绍
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

利用Socket演示分布式程序的执行机理

发布时间:2006.03.10 13:17     来源:http://ccid671.blog.ccidnet.com/blog/ccid/do_showo    作者:kingshare

1、问题的描述

本例子模拟了一个远程请求对象访问属性的过程。有一个远程对象Dog在网络上,现在要得到它的名字(strName)属性的服务。

 

2、实现的机制

1)程序在客户端设有一个存根类(Dog_Stub,该类实现客户端的请求代理),在服务器端启动一个骨架类(dog_Skeleton,该类实现服务器端的响应代理),这两个类都实现了Dog接口,Dog_StubDog_Skeleton通过Socket进行网络远程通信。

2)当客户程序DogClientDog_Stub发出获取名字属性的请求时,Dog_Stub对象把方法名“getName()”作为一个字符串通过Socket发给远程的Dog_Skeleton对象,Dog_Skeleton对象收到这个字符串后再根据字符串的内容执行DogServer对象的getName()方法,得到Dog的名字,然后又通过Socket返回给DogStub对象。

3)整个流程通过网络实现,但对于客户程序DogClient来讲,它并不知道真正的Dog对象在哪里,甚至也不知道这个过程通过了网络,它只知道发出的获取名字属性的请求得到了满意的结果而已。

 

3、各个部分的程序代码

1Dog接口的定义Dog.java

public interface Dog

{

    public String getName() throws Exception;

}

2Dog服务器程序类,它提供向客户端提供“查询”狗的名称“TOMCAT”的服务

public class DogServer implements Dog

{

    String strName;

    int intAge;

    public String getName() throws Exception

    {

        return strName;

    }

    public DogServer( String strNameInput )

    {

        strName = strNameInput;

    }

    public static void main( String[] args ) throws Exception

    {

        new Dog_Skeleton(new DogServer("TOMCAT")); //狗的名称为"TOMCAT"

    }

}

3)服务端骨架类程序,它是服务端的代理对象。该类通过Socket获得客户端Dog_Stub请求代理所发来的“业务方法”请求,然后去访问服务器类中的方法,获得结果。然后再通过Socket向客户端Dog_Stub输出业务结果。

import java.io.*;

import java.net.*;

public class Dog_Skeleton extends Thread

{

    static ServerSocket ss = null;

    DogServer ds;

    public Dog_Skeleton( DogServer dsInput ) throws Exception

    {

        ds = dsInput;

        if ( ss == null )

        ss = new ServerSocket( 8000 );

        this.start();

    }

    public synchronized void run()

    {

        try

        {

            while ( ss != null )

            {

                Socket socket = ss.accept();

                ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );

                ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );

                String strMethodName = ( String )ois.readObject();

                if ( strMethodName.equals( "getName()" ) )

                oos.writeObject( ds.getName() );   //获得业务结果并返回给客户代理

                oos.flush();

                ois.close();

                oos.close();

                socket.close();

            }//while

        }//try

        catch( Exception e )

        {

            e.printStackTrace();

        }//catch

    }//run()

}

4)客户端的存根(Dog_Stub)类

import java.io.*;

import java.net.*;

public class Dog_Stub implements Dog

{

    Socket socket;

    ObjectOutputStream oos;

    ObjectInputStream ois;

    public Dog_Stub() throws Exception

    {

        socket = new Socket( "127.0.0.1", 8000 );

        oos = new ObjectOutputStream( socket.getOutputStream() );

        ois = new ObjectInputStream( socket.getInputStream() );

    }

    public String getName() throws Exception

    {

        oos.writeObject( "getName()" );

        oos.flush();

        return ( String )ois.readObject();

    }

}

5)客户端请求狗的名称的类,该类为客户机的业务功能请求类。该业务功能请求并不是由客户直接向服务器发出的,而是通过客户端Dog_Stub请求代理来发送。

这样客户端只是一个简单的请求者,从而可以实现瘦客户机效果。

public class DogClient

{

    public static void main( String[] args ) throws Exception

    {

        Dog dog = new Dog_Stub();

        String strName = dog.getName();

        System.out.println( "从服务器端获得的狗的名称为:" + strName );

    }

}

6)执行的结果

    执行 DogClient.javaDogServer.java程序两程序


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 用 Java 代码处理本地对象的事件 (03-10) · 一篇不错的介绍Java Socket编程的文章 (12-23)
· AMD明年CPU将统一用Socket AM2架构 (12-20) · 写Java程序最容易犯的21种错误例析 (12-19)
· DisplayTag在技术开发时的应用指南 (12-09) · Java的垃圾回收机制详解和调优大全 (10-25)
· 颠覆Java开发的定律:无需创建对象 (09-22) · Linux网络编程几个必需的网络函数介绍 (05-13)
· 即插即用的分布式中间件 (01-10) · 将PPT多个底层对象“一网打尽” (11-06)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 北京新规不能霸王硬上弓 网店牌照缓期执行
· 软件外包之变的新台阶: 提高全球交付能力
· ERP案例分析 SaaS带来冲击 IT服务商面临挑战
· 通方期货CRM解决方案 房地产行业CRM解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统