1.  POJO

public class DemoInfo implements Serializable{

    private String name;

    private int age;

    public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "DemoInfo{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

2.  Service接口定义

public interface IDemoService {

    DemoInfo getDemoInfoById(DemoInfo info);

}

3.  Provider服务实现

public class DemoServiceImpl implements IDemoService{
@Override
public DemoInfo getDemoInfoById(DemoInfo info) {
System.out.println(info);
DemoInfo demoInfo = new DemoInfo();
demoInfo.setName("zhangsan");
demoInfo.setAge(20);
return demoInfo;
}
}

4.  Provider

public class Provider {

    public static void main(String[] args) {
ServerSocket server = null;
try {
server = new ServerSocket(5678);
while (true) {
Socket socket = server.accept();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
DemoInfo info = (DemoInfo) ois.readObject();
socket.shutdownInput();
IDemoService service = new DemoServiceImpl();
DemoInfo retInfo = service.getDemoInfoById(info);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(retInfo);
oos.flush();
socket.shutdownOutput();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (server != null) {
server.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} } }

5.  Consumer

public class Consumer {

    public static void main(String[] args) {
IDemoService service = (IDemoService) Proxy.newProxyInstance(IDemoService.class.getClassLoader(), new Class[]{IDemoService.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Socket socket = new Socket("192.168.1.1",5678);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(args[0]);
oos.flush();
socket.shutdownOutput();
ObjectInputStream ios = new ObjectInputStream(socket.getInputStream());
DemoInfo retInfo = (DemoInfo)ios.readObject();
socket.shutdownInput();
System.out.println(retInfo);
return null;
}
});
DemoInfo info = new DemoInfo();
info.setName("lisi");
info.setAge(18);
service.getDemoInfoById(info);
} }

Java远程调用原理DEMO的更多相关文章

  1. Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

    转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...

  2. java 远程调用 RPC

    1. 概念 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

  3. Java远程调用

    一.  概念: RMI全称是Remote Method Invocation-远程方法调用,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.它支持 ...

  4. Java远程调用邮件服务器,实现邮件发送

    写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器. 邮件服 ...

  5. java远程调用linux的命令或者脚本

    转载自:http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下 ...

  6. java远程调用rmi入门实例

    RMI是Java的一组拥护开发分布式应用程序的API.RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol). ...

  7. OpenFeign远程调用原理

    之前对OpenFeign 了解到只用在接口上面打个注解,然后就可以通过内部调用去调用远程地址.研究完Feign生成对象以及代理对象的作用过程之后发现这个过程用到了Spring的好多东西,在之后的过程中 ...

  8. Java 远程调用之Hessian简例

    1. [代码]1.服务接口(Hello.java) package server; public interface Hello { String hello(String name);}2. [代码 ...

  9. Java远程调用BPS流程实现流程运行简单示例

    1.简介:略 2.背景:略 3.目的:自我学习笔记 4.实现过程 (1).画出流程图 如下: 路由活动分支下的条件语句为复杂表达式: ((account<200&&divisio ...

随机推荐

  1. exporter API(导出、输出器api)moodel3.3

    Moodle[导出器]是接收数据并将其序列化为一个简单的预定义结构的类.它们确保输出的数据格式统一,易于维护.它们也用于生成外部函数的签名(参数和返回值) 外部函数定义在moodle/lib/exte ...

  2. Python并发复习4- concurrent.futures模块(线程池和进程池)

    Python标准库为我们提供了threading(多线程模块)和multiprocessing(多进程模块).从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提 ...

  3. Linux系统开发之路 - 下

    5.Ubuntu安装好之后,就可以进行开发环境的搭建.(坚持看完有彩蛋,(>--..--<).jpg). 1)首先安装Nodejs和Npm. 打开浏览器输入nodejs.org,进入页面会 ...

  4. python数据结构之队列(二)

    书接上文,双端队列区别于单队列为:双端队列可以对队列头和尾部同时进行操作,单队列不行 #coding:utf-8 class DoubleQueue(object): def __init__(sel ...

  5. python简单名片管理系统

  6. 向cmd中添加字体的方法

    首先下载字体到C:\Windows\Fonts中,然后参考 http://blog.csdn.net/bbirdsky/article/details/38495661 中所讲的方法进行添加.

  7. Linux学习笔记 11

    移除文件 #rm -i file 有信息确认的文件删除 #rm file1 file2 有信息确认的文件删除 #rm -rf file 强制删除file文件

  8. c#接口与抽象类的区别(一)

    abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...

  9. [USACO18JAN]Stamp Painting

    Description: Bessie想拿\(M\) 种颜色的长为\(K\) 的图章涂一个长为\(N\) 的迷之画布.假设他选择涂一段区间,则这段区间长度必须为\(K\) ,且涂完后该区间颜色全变成图 ...

  10. git上传本地项目到github,方法2

    第一步:去github上创建自己的Repository,创建页面如下图所示: 填写相应信息后点击create即可 Repository name: 仓库名称 Description(可选): 仓库描述 ...