Java 网络通信 类还未编写如何进行调用(或者解决思路) 自动调用

神之羽翎 2016-01-26 04:39:08
程序想实现的效果:
客户端现在有一个对象“狗”,加入了一个LinkedList集合,随后将该集合发送到服务器端。服务器端接收到这个集合,会调用一个方法Judge来判断LinkedList里面有什么,如果是狗则调用XXX方法,如果是猫则调用XXX方法。

问题描述:
现在客户端与服务器端单独抽出成为一个jar工具包。也就是说服务器端和客户端会预先写好。换而言之,在该包里没有Judge方法,Judge方法是在程序实际编写时再写成的。那么此时服务器端代码应该怎么写?

实际应用举例:
当实际使用时,应用程序(客户端)调用Send(),此时该jar包中已编好的程序会将对象发送到服务器端;在服务器端只需写一个Judge(),该方法会被jar包中的程序自动调用。

目前代码如下:
客户端:
//向服务器发送数据
public void send(TransferLinkedList linkedList) throws IOException{
/**
* 本方法用于客户端向服务器发送数据。首先从套接字中获取基本输出流,接下来将该输出流转换为对象输出流以输出对象
*/
//从该套接字中获取输出流
OutputStream clientOut = client.getOutputStream();
//将该输出流处理为对象输出流
ObjectOutputStream clientOutObject = new ObjectOutputStream(clientOut);
//传输信息
clientOutObject.writeObject(linkedList);

//刷新缓存区
clientOutObject.flush();

//接收服务器信息以确认是否成功发送信息

}
}


服务器端:
//开始运行
public void run() throws IOException{
//服务器一直等待客户端的连接,当与客户端建立连接时,服务器分出一个线程建立新的Socket进行处理,原有Socket继续等待
//此处为了简便省略线程
while(true){
Socket socket = server.accept();

//处理新的Socket

/**
* 调用Judge方法,Judge方法应在实际使用该jar包时编写
* 此时不知道Judge包含哪些方法,是怎么样的路径,甚至名字是否是Judge
* 该使用什么方法来处理?反射?工厂模式?感觉都不大能解决
*/

}
}


新人第一次发帖求助,排版可能有点乱,问题描述好像不是很容易理解。。。。。。还请大家多多包涵。
...全文
191 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
神之羽翎 2016-01-31
  • 打赏
  • 举报
回复
引用 1 楼 wanghan1977 的回复:
你这个问题实际上就是要定义一个远程调用协议 1.在客户段给发送信息前面加一个头,例如: @header@type:methodinvoke@服务端的类@服务端的方法@参数列表@end@header@ 2.在服务端接受客户段信息时,判断一下头部是否有如上头,如果有,按照协议解析, 然后根据解析内容通过反射调用客户段请求的逻辑执行 此外,服务端最好使用线程池处理客户段请求 在类中定义线程池常量 private static ExecutorService executoService; 在调用具体逻辑时 executoService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 10); executoService.execute(new SocketThread(socket));
感谢~~~~ 这真是一个很好的思路~~~ 受教了。
wanghan1977 2016-01-28
  • 打赏
  • 举报
回复
你这个问题实际上就是要定义一个远程调用协议 1.在客户段给发送信息前面加一个头,例如: @header@type:methodinvoke@服务端的类@服务端的方法@参数列表@end@header@ 2.在服务端接受客户段信息时,判断一下头部是否有如上头,如果有,按照协议解析, 然后根据解析内容通过反射调用客户段请求的逻辑执行 此外,服务端最好使用线程池处理客户段请求 在类中定义线程池常量 private static ExecutorService executoService; 在调用具体逻辑时 executoService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 10); executoService.execute(new SocketThread(socket));

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧