java 远程传送对象_(远程方法的调用)对象序列化、反射在网络编程的运用

public classSimpleServer {private Map remoteObjects = new HashMap<>();//把一个远程对象放入到缓存中

public voidregister(String className,Object

remoteObject){

remoteObjects.put(className, remoteObject);

}public void service() throwsException{

ServerSocket serverSocket= newServerSocket(8088);

System.out.println("服务启动");while(true){

Socket socket=serverSocket.accept

();

InputStream in=socket.getInputStream();

ObjectInputStream ois= newObjectInputStream(in);

OutputStream out=socket.getOutputStream();

ObjectOutputStream oos= newObjectOutputStream(out);

Call call=(Call) ois.readObject

();//接收客户端发送的call对象

System.out.println(call);

call= invoke(call);//调用相关对象的

方法

oos.writeObject(call);//向客户端发送

包含了执行结果的Call对象

ois.close();

oos.close();

socket.close();

}

}publicCall invoke(Call call){

Object result= null;try{

String className=call.getClassName();

String methodName=call.getMethodName();

Object[] params=call.getParams

();//表示方法参数值

Class classType =Class.forName

(className);//表示方法参数类型

Class[] paramTypes =call.getParamTypes();

Method method=classType.getMethod

(methodName, paramTypes);

Object remoteObject=remoteObjects.get(className);if(remoteObject == null){//判断服务端

是否有该类存在throw newException

(className+ "的远程对象不存在");

}else{

result=method.invoke

(remoteObject, params);

}

}catch(Exception e) {

result=e;

}

call.setResult(result);returncall;

}public static void main(String[] args) throwsException {

SimpleServer server= newSimpleServer();//把事先创建的HelloServiceImpl对象加入到服务器

的缓存中,//"com.lazy.socket.reflect.HelloService"类的

全限定名

server.register

("com.lazy.socket.reflect.HelloService", newHelloServiceImpl());

server.service();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值