- 浏览: 205261 次
- 性别:
- 来自: 青岛
最新评论
-
sunysh005:
界面太丑了,功能没有问题
SWFUpload+commons-fileupload 上传文件 -
liwh1989:
liwh1989 写道
SWFUpload+commons-fileupload 上传文件 -
liwh1989:
...
SWFUpload+commons-fileupload 上传文件 -
liwh1989:
SWFUpload+commons-fileupload 上传文件 -
貌似掉线:
已用上。多谢!
native2ascii的 java实现
// 参考:http://book.csdn.net/bookfiles/269/10026911927.shtml // remote.server.SimpleServer.java package remote.server; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Method; import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Map; import share.call.Call; /** *@date 2010-3-13 下午04:38:44 *@author dycc */ public class SimpleServer { private Map<String,Object> objs = new HashMap<String,Object>(); private ObjectInputStream in; private ObjectOutputStream out; public void service()throws IOException{ ServerSocket server_socket = new ServerSocket(8002); System.out.println("----- server started. -----"); while(true){ try{ Socket socket = server_socket.accept(); // ObjectInputStream 会发生阻塞!! in = new ObjectInputStream(socket.getInputStream()); Call call = (Call)in.readObject(); System.out.println("-- get call [" + call.getClassName() + ":" + call.getMethodName() + "]"); call = invoke(call); out = new ObjectOutputStream(socket.getOutputStream()); out.writeObject(call); out.flush(); } catch(Exception e){ e.printStackTrace(); } finally{ try{ if(in != null){ in.close(); } if(out != null){ out.close(); } } catch(Exception e){ } } } } public Call invoke(Call call){ Object obj = objs.get(call.getClassName()); if(obj == null){ try { obj = Class.forName(call.getClassName()).newInstance(); objs.put(call.getClassName(), obj); } catch (Exception e) { e.printStackTrace(); } } try { Method method = obj.getClass().getMethod( call.getMethodName(), call.getParamTypes()); Object result = method.invoke(obj, call.getParams()); call.setResult(result); } catch (Exception e) { e.printStackTrace(); } return call; } public static void main(String[] args)throws Exception{ SimpleServer server = new SimpleServer(); server.service(); } } // remote.service.HelloService.java package remote.service; import java.util.Date; /** *@date 2010-3-13 下午04:29:29 *@author dycc */ public interface HelloService { public String echo(String msg); public Date getTime(); } // remote.service.HelloServiceImpl.java package remote.service; import java.util.Date; /** *@date 2010-3-13 下午04:30:44 *@author dycc */ public class HelloServiceImpl implements HelloService{ public String echo(String msg) { return "echo:" + msg; } public Date getTime() { return new Date(); } } // share.call.Call.java package share.call; import java.io.Serializable; /** *@date 2010-3-13 下午04:32:04 *@author dycc */ public class Call implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String className; private String methodName; @SuppressWarnings(value="unchecked") private Class[] paramTypes; private Object[] params; private Object result; public Call(){ } @SuppressWarnings(value="unchecked") public Call(String className,String methodName, Class[] paramTypes,Object[] params){ this.className = className; this.methodName = methodName; this.paramTypes = paramTypes; this.params = params; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String getMethodName() { return methodName; } public void setMethodName(String methodName) { this.methodName = methodName; } @SuppressWarnings(value="unchecked") public Class[] getParamTypes() { return paramTypes; } @SuppressWarnings(value="unchecked") public void setParamTypes(Class[] paramTypes) { this.paramTypes = paramTypes; } public Object[] getParams() { return params; } public void setParams(Object[] params) { this.params = params; } public Object getResult() { return result; } public void setResult(Object result) { this.result = result; } public String toString(){ StringBuffer sb = new StringBuffer(); sb.append("{className=" + className); sb.append(",methodName=" + methodName); sb.append(",result=" + result); sb.append("}"); return sb.toString(); } } // locale.client.SimpleClient.java package locale.client; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import share.call.Call; /** *@date 2010-3-13 下午04:58:48 *@author dycc */ public class SimpleClient { private ObjectInputStream in; private ObjectOutputStream out; public void invoke(){ try{ Socket socket = new Socket("localhost",8002); out = new ObjectOutputStream(socket.getOutputStream()); Call call = new Call("remote.service.HelloServiceImpl", "getTime",new Class[]{},new Object[]{}); out.writeObject(call); out.flush(); // ObjectInputStream 会发生阻塞!! in = new ObjectInputStream(socket.getInputStream()); call = (Call)in.readObject(); System.out.println("result=" + call.getResult()); } catch(Exception e){ e.printStackTrace(); } finally{ try{ if(in != null){ in.close(); } if(out != null){ out.close(); } } catch(Exception e){ } } } public static void main(String[] args){ SimpleClient client = new SimpleClient(); client.invoke(); } }
发表评论
-
ubuntu 里安装 db2
2011-04-11 16:17 5306# 下载 http://www-01.ibm.com ... -
几个小算法题
2011-04-03 13:40 1150/** * 数字三角 * 当 n == 7 时输 ... -
获取 SkyDrive 的文件外链固定地址
2011-04-03 11:47 1464javascript: var id = window.se ... -
常用知识记录
2011-04-02 17:25 1635sql 部分 1. 查询已创建的数据库 // ... -
Java 与 C++ 在表达式运算上的一点异同
2010-12-25 00:24 12981. java public class Main{ ... -
SWFUpload+commons-fileupload 上传文件
2010-12-17 19:20 11021说明:使用SWFUpload 上传文件,可在客户端校验文件大小 ... -
在 ubuntu 下搭建 ftp 服务端 [ vsftpd ]
2010-11-16 20:11 1905vsftpd 1. 安装 ftp 服务端 ... -
Tomcat 常用操作
2010-11-16 13:47 2683tomcat 常用操作 1. 安装 tomcat 1.1 ... -
在 ubuntu 下搭建 svn 服务端
2010-11-13 20:43 3019参考: http://wiki.ubunt ... -
正则表达式常用功能代码
2010-11-02 19:37 13411. 校验 /** * 校验 email * @pa ... -
三种常见的排序方法[选择,冒泡,快速]
2010-10-17 17:51 1122public class Main{ public ... -
Filter 常用代码
2010-10-12 22:50 12311. 压缩 Filter // GZIPFilter.jav ... -
log4j 常用配置代码
2010-10-12 14:35 1403Reference library: commons-log ... -
计算组合数并输出
2010-09-14 09:35 5624问题描述:计算一组数据的组合数并输出 例如:输入1,2,3 ... -
native2ascii的 java实现
2010-09-13 13:49 3898描述:简单模拟JDK自带的 native2ascii.exe ... -
计算全排列
2010-09-13 09:04 1610问题描述:计算一组数 ... -
apache commons dbcp 学习与使用
2010-06-18 20:37 1610类结构 org |_demo |_d ... -
Java常用功能代码
2010-06-10 14:33 59201. 屏幕截图 public static ... -
一个关于组合数的问题
2010-05-03 20:09 11881. 题目来源 未解之谜俱 ... -
Java常用功能代码[ 2 ]
2010-04-27 17:35 14151. 加载所有 jar 包中同名的配置文件 /** * ...
相关推荐
### Java远程方法调用(RMI):深入解析与实践 #### 一、RMI概念与原理 Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络...
Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中执行对象方法的技术。它允许一个Java应用程序调用运行在不同JVM(Java虚拟机)上的另一个对象的方法,就像是在本地调用一样。在Java RMI中...
Java远程方法调用(Remote Method Invocation,简称RMI)组件是一种关键的技术,它允许Java应用程序在不同的网络节点之间透明地调用对象的方法,仿佛这些对象都在本地进程中一样。这种技术在构建分布式系统、大型...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
Eclipse 插件RMI Plug-in for Eclipse 2.0 博文链接:https://robinjie.iteye.com/blog/34606
标题和描述中都提到了“Java远程方法调用”,这是指Java RMI(Remote Method Invocation)技术。Java RMI是Java编程语言中一种用于实现远程过程调用的应用程序接口,它使用对象序列化方式在不同虚拟机之间传递对象,...
Java远程方法调用(RMI,Remote Method Invocation)是Java编程中的一个重要概念,它使得一个Java程序能够调用网络中另一台计算机上的Java方法,如同调用本地方法一样。RMI是Java开发分布式应用程序的关键技术,它极...
Java远程方法调用是一种分布式系统技术。它允许一个java虚拟机调用运行在网络中另一个地方的JVM上的对象方法. 这种技术对开发大型系统尤为重要,因为它使得在多台机器上分布资源和处理负载的想法成为可能。
2. **类型安全**:由于使用Java语言,RMI提供了类型安全的远程调用。 3. **高性能**:RMI可以利用Java的自动内存管理和垃圾收集机制,减少资源消耗。 ### RMI的劣势 1. **平台依赖**:虽然Java有“一次编写,到处...
Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台中用于分布式计算的核心技术。它允许一个Java对象在一台机器上调用另一台机器上的对象的方法,仿佛这些方法是在本地对象上调用一样。本篇文章将对...
在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...
Java远程方法调用实践 Java远程方法调用实践是一种允许Java对象之间通过网络进行通信和交互的技术。它允许Java对象在不同的虚拟机上运行,并且可以在这些虚拟机之间进行通信和交互。Java远程方法调用实践基于Java...
2. **远程实现(Remote Implementation)**:实现了远程接口的类,这些类的方法将被远程调用。实现类通常需要序列化,因为数据需要在网络上传输。 3. **远程对象注册表(Registry)**:类似于服务发现器,它是一个...