2 u013426926 u013426926 于 2016.01.26 16:35 提问

Java 网络通信 类还未编写如何进行调用(或者解决思路)
  程序想实现的效果:客户端现在有一个对象“狗”,加入了一个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
             * 该使用什么方法来处理?反射?工厂模式?感觉都不大能解决
             */

        }
    }

2个回答

wanghan1977
wanghan1977   2016.01.28 09:48
已采纳

你这个问题实际上就是要定义一个远程调用协议
1.在客户段给发送信息前面加一个头,例如:
@header@type:methodinvoke@服务端的类@服务端的方法@参数列表@end@header@
2.在服务端接受客户段信息时,判断一下头部是否有如上头,如果有,按照协议解析,
然后根据解析内容通过反射调用客户段请求的逻辑执行

此外,服务端最好使用线程池处理客户段请求
在类中定义线程池常量
private static ExecutorService executoService;

在调用具体逻辑时
executoService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 10);
executoService.execute(new SocketThread(socket));

devmiao
devmiao   Ds   Rxr 2016.01.27 08:17
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
利用java编写网络通信程序
利用java编写网络通信程序作者:于洪斌、马俊光、车雪松  一、java与网络通信   java是一门适合于分布式计算环境、尤其是Internet程序设计的语言。这不仅仅在于java具有很好的安全性和可移植性,还在于java为Internet编程提供了丰富的网络类库支持。利用这些网络类库,可以轻松编写多种类型的网络通信程序。   TCP/IP协议是当今最流行的协议,也是Int
java高并发解决思路
java高并发解决方案
Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
使用TCP/IP的套接字(Socket)进行通信   套接字Socket的引入   为了能够方便地开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统用调用socket(套接字)。   socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。   随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又
Java之GUI和网络编程
一、GUI        1、计算机与用户交互的方式有两种,一种是命令行,一种是图形化界面,而GUI是图形用户的接口,用图形的方式来显示计算机操作的界面,这样更方便直接,我们把图像化界面的对象都封装在了Java.Awt 和Javax.Swing包中。Awt是抽象接口工具包,它需要调用本地系统方法实现功能,与系统依赖性强,跨平台性较弱,属于重量级控制。Swing是在Awt的基础上建立的一套图形
Java调用应用程序和Dos中的命令
解决Java新建进程问题 Java调用应用程序 可以学会如何使用Java的Runtime类的exec
JAVA中对一维数组排序的方法(在快速排序上进行的优化)
对于搞算法的人经常使用到快排(快速排序的简称), 对于C++中的sort(,,)来说是快排的方法,相对来说对于JAVA来说,也有快排的调用, 这里的方法是 Arrays.sort(数组名字); 代码: package com; import java.util.Arrays; public class Arry { public st
c语言中如何实现网络通信
主要函数: ------------------------------------------ TCP实现服务器与客户端的通信流程 //服务器端---服务器是一个被动的角色 1.socket          //买一个手机 2.bind            //SIM卡 绑定一个手机号(ip+port) 3.listen          //待机(等待电话打入) 4.acce
java 面试题库
JAVA程序员面试宝典 面向对象的特征有哪些方面    1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面。抽象并不5. 打算了解全部问题,而6. 只是选择其中的一部分,7. 暂时不8. 用部分细节。抽象包括两个方面,9. 一是过程抽象,10. 二是数据抽象。 11. 继承:继承是一种联结类的层次模型,12. 并且允许和鼓励
使用JAVA编写网络通信程序
1 Java中输入/输出流概念: 过滤流DataInputStream 和DataOutputStream 除了分别作为FilterInputStream 和FilterOutputStream的子类外,还分别实现了接口DataInput 和DataOutput。接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean(
Java实例 定义任务的一个发射小程序 实现Runnable接口并编写run()方法
定义任务,只需实现Runnable接口并编写run()方法